如何在 tkinter 后台运行函数[重复]

2024-05-30

我是 GUI 编程新手,我想用 tkinter 编写一个 Python 程序。我想要它做的就是在后台运行一个可以通过 GUI 影响的简单函数。

该函数从 0 计数到无穷大,直到按下按钮为止。至少这是我想要它做的。但我不知道如何在后台运行这个函数,因为 tkinter 的 mainloop() 一直在控制。如果我在无限循环中启动该函数,则 mainloop() 无法执行,GUI 就会死掉。

我想在每个周期后将控制返回到 mainloop() ,但是如何在没有用户触发事件的情况下将控制从 mainloop() 返回到 runapp 函数?

下面是一些杀死 GUI 的示例代码:

from Tkinter import *

class App:
    def __init__(self, master):

        frame = Frame(master)
        frame.pack()

        self.button = Button(frame, text="START", command=self.runapp)
        self.button.pack(side=LEFT)

        self.hi_there = Button(frame, text="RESTART", command=self.restart)
        self.hi_there.pack(side=LEFT)

        self.runapp()

    def restart(self):
        print "Now we are restarting..."

    def runapp(self):
        counter = 0
        while (1):
            counter =+ 1
            time.sleep(0.1)

基于事件的编程在概念上很简单。想象一下,程序文件的末尾是一个简单的无限循环:

while <we have not been told to exit>:
    <pull an event off of the queue>
    <process the event>

因此,要连续运行一些小任务,您所需要做的就是将其分解为小块,并将这些块放入事件队列中。每次循环时,都会自动执行下一次计算迭代。

您可以使用以下命令将对象放入事件队列中after http://effbot.org/tkinterbook/widget.htm#Tkinter.Widget.after-method方法。因此,创建一个方法来增加数字,然后重新安排自己在几毫秒后运行。它看起来像:

def add_one(self):
    self.counter += 1
    self.after(1000, self.add_one)

以上将每秒更新一次计数器。当你的程序初始化时,你调用它一次,然后它会导致自己被一次又一次地调用,等等。

仅当您可以将大问题(在您的情况下“永远计数”)分解为小步骤(“添加一个”)时,此方法才有效。如果您正在执行缓慢的数据库查询或大量计算之类的操作,则此技术不一定有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 tkinter 后台运行函数[重复] 的相关文章

随机推荐