如何在不关闭gui的情况下突破mainloop()

时间:2018-02-27 17:50:58

标签: python tkinter

我有一个简单的python GUI,它根据数组中的值填充网格,我希望这个简单的GUI可以在其他函数运行的同时放在屏幕上。这些其他功能的时间是不确定的,所以我不能使用after(时间,功能)在某个固定的时间间隔内调用它们

def go(self):
    """
    Start the main GUI loop
    :return:
    """
    mainloop()

mainloop在go函数中启动,我想知道是否可以在不关闭窗口的情况下中断mainloop或者在不调用mainloop的情况下绘制GUI?

我知道我能做到

after(time, function)

但是我不知道在屏幕上保持GUI的同时要杀死主循环的内容。

3 个答案:

答案 0 :(得分:0)

使用线程模块在主循环旁边运行您的功能:

from threading import Thread

def go(self):
    t = Thread(target=function)
    t.start() # start the thread in the background
    mainloop()

答案 1 :(得分:0)

简单地说:你不能,或者至少它不是你想要做的。我建议重构你的代码,把它放在主循环中(比如让tkinter成为一个类并在init函数中调用函数)。如果您发布整个代码,我可以帮助您。

答案 2 :(得分:0)

  

mainloop在go函数中启动,我想知道是否可以在不关闭窗口的情况下中断mainloop或者在不调用mainloop的情况下绘制GUI?

听起来你有一个非常独特的需求。为了给你一个字面的答案,是的,可以在不关闭窗口的情况下突破主循环。您可以在根窗口上调用quit以使mainloop退出。您可以重新启动mainloop,或在根窗口上调用update方法来处理事件。

这通常不是GUI应该如何工作,但如果您确定在程序运行时不需要更新窗口,那么如果您愿意,您当然可以这样做。