我需要一个简单的信息框来显示一些状态输出,我可以使用print
命令将其转储到控制台。我发现最简单的可能性是以下内容:
import Tkinter as tk
root = tk.Tk()
root.withdraw()
from tkMessageBox import showinfo
showinfo('some caption', 'some info')
这种实现的唯一问题是,我的程序(不是用Tkinter编写的)将不会继续运行,直到按下
showinfo
消息框的“ok”按钮。也就是说,showinfo
对话框将被阻止。因此,我的问题是:有没有一种简单的方法使
showinfo
不阻塞?在Tkinter中是否有其他非阻塞的消息框实现?我可以想到一个典型的使用场景是显示帮助页面 - 窗口应该打开,主程序继续正常运行。编辑1:这里有一个简单的帮助窗口,但不幸的是,它不会显示出来,除非我启动不同的
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又会被阻塞。