当前位置: 首页 > 知识库问答 >
问题:

从tkinter gui停止python线程

甄华清
2023-03-14

我试图创建一个简单的pythongui(使用Tkinter),其中包含start按钮,在线程中运行while循环,以及停止while循环的stop按钮。

我对停止按钮有问题,它不会停止任何东西,一旦单击开始按钮,就会冻结GUI。

见下面的代码:

import threading
import Tkinter

class MyJob(threading.Thread):

    def __init__(self):
        super(MyJob, self).__init__()
        self._stop = threading.Event()

    def stop(self):
        self._stop.set()    

    def run(self):
        while not self._stop.isSet():
            print "-"

if __name__ == "__main__":

    top = Tkinter.Tk()

    myJob = MyJob()

    def startCallBack():        
        myJob.run()

    start_button = Tkinter.Button(top,text="start", command=startCallBack)
    start_button.pack()

    def stopCallBack():
        myJob.stop()

    stop_button = Tkinter.Button(top,text="stop", command=stopCallBack)
    stop_button.pack()

    top.mainloop()

知道怎么解决这个问题吗?我肯定这是微不足道的,一定做了成千上万次,但我自己找不到解决办法

谢谢大卫

共有1个答案

龚博涛
2023-03-14

代码正在直接调用run方法。它将在主线程中调用该方法。要在单独的线程中运行它,应该使用线程。线启动方法。

def startCallBack():        
    myJob.start()
 类似资料:
  • 我正在写一个小的多线程超文本传输协议文件下载程序,并希望能够缩小可用的线程,因为代码遇到错误 这些错误将特定于在web服务器不允许任何更多连接的情况下返回的http错误 eg.如果我设置了一个由5个线程组成的池,每个线程都试图打开自己的连接并下载文件块。服务器可能只允许2个连接,我相信会返回503个错误,我想检测到这一点并关闭一个线程,最终限制池的大小,大概只有服务器允许的2个 我能让线自动停止吗

  • 我正在编写一个Android应用程序,它连接到蓝牙设备,读取设备发送的数据,将其添加到AChartEngine图形中,并在文本视图中显示数据。 我的Bluetooth代码与BluetoothChat示例代码中的线程实现非常相似(它与SDK一起提供)。我可以在LogCat中看到< code>ConnectedThread循环正在执行并因此获得新数据,但我的TextView在7行之后停止更新,图形间歇

  • 所以这是我需要解决的大事。我有Visual C#应用程序。在这个应用程序中,用户输入数据并单击Execute。当他们点击执行时,核心方法开始在新线程中,在那个线程和方法是一个循环。不断地使用方法调用器,我向UserForm发送更新,循环实际上在做什么。例如,像这样,我在每个cicle中更新progressBar。

  • 通过运行https://github.com/firebase/firebase-admin-java/blob/master/src/test/java/com/google/firebase/database/integration/shutdownexample.java的示例代码 调用后,仍有一些线程在运行: 参考处理程序终结器信号调度器FirebaseDatabaseWorker池-5-

  • 问题内容: 我正在编写一段连接到服务器的代码,使用该连接会生成一堆线程并执行一堆“工作”。 在某些情况下,连接失败,我需要停止所有操作并从头开始创建新对象。 我想在对象之后进行清理,但在线程上调用thread.stop,但是此方法似乎已被弃用。 推荐的替代方法是什么?是否应该为每个线程编写自己的清理和退出方法?将线程设置为null?或者是其他东西? 问题答案: 看这里 : 在HowToStopAT