python中showinfo_python – Tkinter中的非阻塞信息对话框
我需要一個簡單的信息框來顯示一些狀態輸出,我可以使用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中是否存在非阻塞的備用消息框實現?我可以想到顯示幫助頁面的典型用例 – 窗口應該打開,主程序繼續正常運行.
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再次被阻止.
最佳答案 不要使用tkMessageBox,因為它不允許太多配置.只需創建一個看起來像一個的自定義對話框.這篇
page講述了很多關于創建自定義Tkinter對話框的內容.
總結
以上是生活随笔為你收集整理的python中showinfo_python – Tkinter中的非阻塞信息对话框的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: multiprocessing.mana
- 下一篇: python装饰器setter_第7.2