Python Tkinter中的多处理

发布于 2021-01-29 14:10:16

如何在没有多线程的情况下在python中运行多个进程?例如考虑以下问题:

我们必须制作一个Gui,它具有一个启动一个函数的开始按钮(例如,打印所有整数),还有一个停止按钮,以便单击该按钮可以停止该函数。

如何在Tkinter中做到这一点?

关注者
0
被浏览
160
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    然后,您需要将Button小部件与启动工作线程的函数绑定在一起。例如:

    import time
    import threading
    import Tkinter as tk
    
    class App():
        def __init__(self, root):
            self.button = tk.Button(root)
            self.button.pack()
            self._resetbutton()
        def _resetbutton(self):
            self.running = False
            self.button.config(text="Start", command=self.startthread)
        def startthread(self):
            self.running = True
            newthread = threading.Thread(target=self.printints)
            newthread.start()
            self.button.config(text="Stop", command=self._resetbutton)
        def printints(self):
            x = 0
            while self.running:
                print(x)
                x += 1
                time.sleep(1) # Simulate harder task
    

    通过这种self.running方法,您只能通过更改其值来优雅地结束线程。注意,使用多个线程可避免printints在执行时阻塞GUI 。

    我已经阅读了前面的问题,并且我想为什么您在这里明确要求没有多线程的解决方案。在Tkinter中,此解决方案可用于其他线程必须与GUI部件进行通信的情况。例如:在渲染某些图像时填充进度条。

    但是,正如注释中指出的那样,这种方法对于仅打印数字而言太复杂了。

    在这里,您可以找到许多有关Tkinter的信息和更多示例。


    编辑:

    由于您的新问题已经结束,因此我将在此处更改代码以阐明最后一点。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看