tkinter循环和串行写入

tkinter循环和串行写入,第1张

tkinter循环和串行写入

语境

您使用了Tkinter

mainloop
while
-loop,现在您想将它们放到一个程序中。

while X:    do_y()

master.mainloop()

解决方案

有几种适合您的解决方案。

  1. 分割循环,并使用它

    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()

  2. 由我使用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循环。

  1. 用于
    update
    刷新GUI。
    while X:do_y()master.update()

这种方法是一种不寻常的方法,因为它取代了大多数GUI框架(例如Tkinter)中的mainloop。请注意,使用1和2可以有多个循环,而不仅仅是3中的一个。

  1. 使用新的执行线程来并行执行循环。!该线程不得直接访问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()

  2. 在新线程中启动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方法进行。




欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5639471.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存