Как использовать многопоточность или очередь в Tkinter Python - PullRequest
0 голосов
/ 25 марта 2019

У меня есть рабочий код, который печатает вывод, как я хотел, но мое приложение зависает до тех пор, пока оно больше не отвечает. Я использую tkinter, python3.7. Я много читал о многопоточности и организации очередей, но понятия не имею, с чего начать, поскольку я новичок в Python.

Вот мой основной код:

from tkinter import *

class App(Frame):

def __init__(self, master=None):
    Frame.__init__(self, master)
    self.grid(row=0, column=0, sticky=W+E+N+S)
    self.build_widgets()

def run_script1(self): #COUNT
    sys.stdout = self
    try:
        del (sys.modules["COUNT"])
    except:
        pass
    import COUNT
    COUNT
    sys.stdout = sys.__stdout__

def write(self, txt):
    self.useroutput.insert(INSERT, txt)
    self.update_idletasks()

def build_widgets(self):

    self.label1 = Label(self, text="TEST", font="bold")
    self.label1.grid(row=0, column=0, sticky=W+E+N+S, padx=5, pady=5)

    self.button2 = Button(self, text="COUNT", command=self.run_script1)
    self.button2.grid(row=1, column=0, sticky=W+E+N+S, padx=5, pady=5)

    self.label1 = Label(self, text="Logs:")
    self.label1.grid(row=2, column=0, sticky=W+E+N+S, padx=5, pady=5)

    self.useroutput = Text(self, width=70, height=20)
    self.useroutput.grid(row=3, column=0, sticky=W+E+N+S, padx=1, pady=1)

    self.quitbutton = Button(self, text="Quit", command=quit)
    self.quitbutton.grid(row=4, column=0, sticky=W+E+N+S, padx=5, pady=5)

    self.scroll = Scrollbar(self, orient="vertical", command=self.useroutput.yview)
    self.scroll.grid(row=3, column=1, sticky=N+S, padx=5, pady=5)

root = Tk()
root.resizable(False, False)
root.title("Ping Tool")
app = App(master=root)
app.mainloop()

Вот код, который он вызывает, называется COUNT, который находится в том же каталоге:

import time
for i in range(1,1000):
    print(i)
    time.sleep(2)
...