Я работаю над графическим интерфейсом для математического приложения.Поскольку вычисления часто занимают некоторое время, я бы хотел вывести промежуточные результаты в текстовое поле в новом окне tkinter, которое откроется, когда начнутся вычисления.
Я попал в точку, где я смоготкройте новое окно и проведите расчет, но результаты будут напечатаны после его окончания.
Я подготовил фрагмент кода, который демонстрирует мой подход:
import tkinter as tk
import threading
import time as t
class CalculationDialog(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.start()
self.root = tk.Tk()
self.textField = tk.Text(self.root)
self.bCloseDialog = tk.Button(self.root, text="Close", state=tk.DISABLED, command=self.root.destroy)
self.textField.grid(row=1, column=0)
self.bCloseDialog.grid(row=2, column=0)
def callback(self):
self.root.quit()
def run(self):
self.root.protocol("WM_DELETE_WINDOW", self.callback)
self.root.mainloop()
def calculate():
app = CalculationDialog()
# Conduct calculation and output to textfield of app
func(app.textField,0)
def func(output,input):
for i in range(input,100):
result = i**2
output.insert(tk.END,str(result)+"\n")
t.sleep(0.1)
main = tk.Tk()
buttonCalc = tk.Button(main,text="Calculate",command=calculate)
buttonCalc.pack(side=tk.TOP)
main.mainloop()
Есть ли у кого-нибудь предложениячего мне не хватает?Иногда я получаю сообщение о том, что CalculationDialog
не имеет атрибута root
.Однако эта ошибка не всегда возникает.
Cheers