我需要一個簡單的信息框來顯示一些狀態輸出,我可以使用print
轉儲到控制檯。我發現最簡單的可能性是:Tkinter中的非阻塞信息對話框
import Tkinter as tk
root = tk.Tk()
root.withdraw()
from tkMessageBox import showinfo
showinfo('some caption', 'some info')
這個實現的唯一的問題是我的程序(不是寫在Tkinter的)將不會繼續運行,直到showinfo
消息框的「確定」按鈕被按下。也就是說,showinfo
對話框將被阻止。
因此我的問題:有沒有簡單的方法使showinfo
非阻塞? Tkinter中是否有其他的消息框實現是非阻塞的?我可以想到顯示幫助頁面的典型用法 - 窗口應該打開並且主程序保持正常運行。
EDIT1:這裏就是我想出了一個簡單的幫助窗口,但遺憾的是它並沒有顯示出來,除非我推出一個不同tkMessageBox
或類似物體:
class TextInfo(object):
def __init__(self, parent, window_title = 'window', textfield = 'a text field', label = None):
self.top = tk.Toplevel(parent)
self.parent = parent
self.window_title = window_title
self.textfield = textfield
# set window title
if window_title:
self.top.title(window_title)
# add label if given
if label:
tk.Label(self.top, text=window_title).grid(row=0)
# create the text field
self.textField = tk.Text(self.top, width=80, height=20, wrap=tk.NONE)
if textfield:
self.textField.insert(1.0, textfield)
self.textField.grid(row=1)
# create the ok button
b = tk.Button(self.top, text="OK", command=self.ok)
b.grid(row=2)
def ok(self):
self.top.destroy()
這是怎麼我打電話給窗口:
root = tk.Tk()
root.withdraw()
TextInfo(self.root, window_title, textfield, label)
# don't call root.mainloop() here, because this will lead to blocking.
是否有某種屬性或事件需要設置窗口顯示?如果我撥打root.mainloop()
,窗口會顯示出來,但是我的GUI再次被阻止。
Dialog(和派生的DialogBox)在它的Show方法中做一個不可配置的全局抓取,所以不行,除了子類和使用替代Show方法外,不能使Dialog非阻塞。 請參閱http://perlmonks.org/?node_id=836513 for perl實現 – 2012-07-10 17:35:10
@JoranBeasley所以Tkinter中沒有「幫助頁面」類型的對話框,只會彈出並坐在那裏? – memyself 2012-07-10 18:13:15