Поток не может присоединиться к tkinter - PullRequest
0 голосов
/ 07 апреля 2020

Я создаю GUI и сталкиваюсь с проблемой невозможности правильно присоединиться к потоку. Я извлек основную часть и написал следующий код: кнопка для запуска потока и кнопка для закрытия потока.

import tkinter as tk
import threading
from time import sleep

class test:
    def __init__(self):
        root = tk.Tk()
        root.geometry('300x100')
        self.runAllflag = False
        tk.Button(root, text="run", command = self.run).pack()
        tk.Button(root, text="stop", command = self.stop).pack()
        self.status = tk.StringVar()
        tk.Label(root, textvariable = self.status).pack()
        root.mainloop()

    def test1(self):
        while self.runAllflag:
            sleep(0.1)
            print('threading runnning')
        else:
            print('Escaped from the loop') 
            self.status.set('Stopped')  #### Seems that the program stuck here ###
            print('Status written "Stopped')

    def run(self):
        if not self.runAllflag:
            self.runAllflag = True
            self.status.set('Running')
            self.t = threading.Thread(target=self.test1)
            self.t.start()

    def stop(self):
        if self.runAllflag:
            self.runAllflag = False
            self.t.join()

if __name__ == '__main__':
    test()

Когда я запускаю GUI, нажмите кнопку запуска и затем остановку кнопка. Вот журнал сообщений:

threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
threading runnning
Escaped from the loop

Кажется, что программа застряла в строке, чтобы написать запись содержимого метки в функции .test1(self). Интересно, почему он не может написать это правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...