语境
您使用了Tkinter
mainloop和
while-loop,现在您想将它们放到一个程序中。
while X: do_y()
和
master.mainloop()
解决方案
有几种适合您的解决方案。
分割循环,并使用它
after
来让GUI回叫您:def do_y2():do_y()if X: master.after(123, do_y2) # after 123 milli seconds this is called again
do_y2()
master.mainloop()由我使用guiLoop。
from guiLoop import guiLoop # https://gist.github.com/niccokunzmann/8673951#file-guiloop-py
@guiLoop
def do_y2():
while X:
do_y()
yield 0.123 # give the GUI 123 milli seconds to do everything
do_y2(master)
master.mainloop()
guiLoop使用从1开始的方法。但是允许您使用一个或多个while循环。
- 用于
update
刷新GUI。while X:do_y()master.update()
这种方法是一种不寻常的方法,因为它取代了大多数GUI框架(例如Tkinter)中的mainloop。请注意,使用1和2可以有多个循环,而不仅仅是3中的一个。
使用新的执行线程来并行执行循环。!该线程不得直接访问master或任何GUI元素,因为Tkinter可能会崩溃!
import threading
def do_y_loop():
while X:
do_y()
thread = threading.Thread(target = do_y_loop)
thread.deamon = True # use this if your application does not close.
thread.start()
master.mainloop()在新线程中启动mainloop。与4中一样,如果您从线程访问GUI,Tkinter可能会崩溃。
import threading
thread = threading.Thread(target = master.mainloop)
thread.deamon = True # use this if your application does not close.
thread.start()
while X:
do_y()
在4.和5.中,GUI和while循环之间的通信可以/应该通过全局变量进行,但绝不能通过tkinter方法进行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)