【发布时间】:2012-05-12 13:40:22
【问题描述】:
我试图通过按下 Tkinter GUI 中的按钮来调用外部函数;函数“插入”到文本元素中。这完美地工作;只要 time.sleep() 没有紧随其后。如果不遵循,则文本正确更新;如果是,则文本不会更新,尽管该函数似乎仍在循环运行,因为它会愉快地将文本打印到控制台。
这是我的示例脚本:
from Tkinter import *
from time import sleep
def test_function(gui_self):
while True:
print "Debug message"
gui_self.main_.insert(END, "Test")
class GUI:
def __init__(self, master):
frame = Frame(master, width=300, height=500)
frame.pack()
self.main_ = Entry(frame, width=80, justify=CENTER)
self.main_.pack()
test_function(self)
root = Tk()
application = GUI(root)
root.mainloop()
这很好用。但是,将 test_function 更改为以下内容似乎会搞砸:
def test_function(gui_self):
while True:
print "Debug message"
gui_self.main_.insert(END, "Test")
sleep(5)
有什么建议可以解决我在这里做错的任何事情吗?我确信这只是一个问题,我作为一个相当基本的用户,没有使用正确的语法。
附带说明一下,“睡眠”命令似乎也完全冻结了程序,我觉得这很烦人且没有吸引力。除了'管道'线程之外,是否有一种方法可以将循环暂停可变设置(例如,var = 1(秒))的时间量,这将是有效的并且更......干净?
谢谢。
【问题讨论】:
-
阅读事件循环。基本上,当程序卡在你的函数中时,它不能更新 GUI。这里有一个很好的 tkinter 资源:effbot.org/tkinterbook/tkinter-events-and-bindings.htm