У меня есть рабочий код, который печатает вывод, как я хотел, но мое приложение зависает до тех пор, пока оно больше не отвечает. Я использую 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)