Python tkinter中的多处理

Cha*_*dan 3 python tkinter multiprocessing

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

我们必须制作一个Gui,它有一个启动按钮,启动一个函数(比如打印所有整数),并且有一个停止按钮,这样点击它就会停止该功能.

如何在Tkinter中做到这一点?

A. *_*das 5

然后,您需要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
Run Code Online (Sandbox Code Playgroud)

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

我已经阅读了上一个问题,我想为什么你明确要求这里没有多线程的解决方案.在Tkinter中,此解决方案可用于其他线程必须与GUI部分通信的场景中.例如:在渲染某些图像时填充进度条.

但是,正如评论中指出的那样,这种方法对于打印数字而言过于复杂.

在这里您可以找到很多关于Tkinter的信息和更多示例.


编辑:

由于您的新问题已经结束,我将在此处更改代码以澄清最后一点.

  • @Chandan:只要工作线程中没有任何内容尝试访问任何 Tkinter 数据结构,它就可能起作用。问题来自于尝试从多个线程访问 GUI 对象。 (2认同)