gpt4 book ai didi

python - 在 Tkinter 窗口中调用包含 'time.sleep()' 的外部函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:02 24 4
gpt4 key购买 nike

我试图通过按下 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)

有什么建议可以解决我在这里做错的问题吗?我确信这只是我作为一个相当基础的用户没有使用正确语法的问题。

附带说明一下,“ sleep ”命令似乎也会完全卡住程序,我觉得这很烦人而且没有吸引力。有没有一种方法可以将循环暂停可变设置(例如,var = 1(秒))的时间量,而不是“管道”线程,这将是高效且更..干净的?

谢谢。

最佳答案

我完全同意 Nick Craig-Wood 的回答——不要让 gui 的主线程休眠。通常,您希望在 after 之后调用,它会注册一个函数,以便在(大约)X 毫秒之后调用。这是一个每 5 秒调用一次 test_function 的示例。每次调用 test_function 时,它都会重新注册自己以在 5 秒后调用。

def test_function(gui_self):
print "Debug message"
gui_self.main_.insert(END, "Test")
gui_self.after(5000,test_function,gui_self)
#the line below also should work. As long as the item is a Tkinter widget
#gui_self.main_.after(5000,test_function,gui_self)

此外,完全不相关,(但作为风格问题)——您在 GUI 中使用 main_ 而不仅仅是 main 是有原因的吗?通常,尾部下划线附加到避免与 python 关键字的名称冲突。据我所知,main 不是关键字。

关于python - 在 Tkinter 窗口中调用包含 'time.sleep()' 的外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10564267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com