Я создаю приложение tkinter и хочу добавить новое окно в это приложение, где я могу обновить статус текущей операции.Я хочу, чтобы каждый раз, когда событие завершалось, я хотел обновить его до текстового виджета отдельного окна, которое работает параллельно.Как и в окне консоли, пользователи могут легко читать и понимать состояние приложений / ошибок и т. Д.
Я довольно новичок в Python и Tkinter, мой подход заключается в следующем,
Прежде чем напрямуювключив его в реальное приложение, я попытался воспроизвести то, что имел в виду, в отдельном проекте.
Сначала я создал простое главное окно следующим образом:
from tkinter import *
from tkinter import ttk
from Console import ConsoleWindow
class Main:
def __init__(self, master):
self.master = master
self.master.title('Main')
self.master.geometry('640x480')
self.btn = ttk.Button(self.master, text = 'Run Console', command = self.runConsole)
self.btn.pack(side = LEFT)
self.btn2 = ttk.Button(self.master, text = 'Update Console', command = self.updateConsole, state = DISABLED)
self.btn2.pack(side = RIGHT)
def runConsole(self):
self.btn.configure(state = 'disabled')
self.btn2.configure(state = 'normal')
consolewindow = Toplevel(self.master)
console = ConsoleWindow(consolewindow)
consolewindow.mainloop()
def updateConsole(self):
string = 'Console Text !!'
ConsoleWindow.insertText(string)
def main():
mainWindow = Tk()
mainGUI = Main(mainWindow)
mainWindow.mainloop()
if __name__ == "__main__":
main()
Далее,окно консоли
from tkinter import *
class ConsoleWindow:
def __init__(self, master):
self.master = master
self.master.title('Console Window')
self.master.geometry('640x480')
self.scrollBar = Scrollbar(self.master)
self.textArea = Text(self.master)
self.scrollBar.pack(side=RIGHT, fill=Y)
self.textArea.pack(side=LEFT, fill=Y)
self.scrollBar.config(command=self.textArea.yview)
self.textArea.config(yscrollcommand=self.scrollBar.set)
self.textArea.insert(INSERT, 'Running')
self.textArea.configure(state='disabled')
def insertText(self, textToUpdate):
text = f'{textToUpdate}\n'
self.textArea.configure(state='normal')
self.textArea.insert(INSERT, text)
self.textArea.configure(state='disabled')
Я ожидаю использовать функцию insertText для многократного обновления текстового виджета во время выполнения приложения.Когда я запускаю этот код, я могу создать экземпляр ConsoleWindow, но когда я нажимаю кнопку «обновить консоль», я получаю следующую ошибку:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Aswin Kumar\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "C:/Users/Aswin Kumar/Console Window/Main.py", line 31, in updateConsole
ConsoleWindow.insertText(string)
TypeError: insertText() missing 1 required positional argument: 'textToUpdate'
Я попытался добавить экземпляр ConsoleWindowto insertText (),
ConsoleWindow.insertText(console, string)
И, получая следующую ошибку,
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Aswin Kumar\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "C:/Users/Aswin Kumar/Console Window/Main.py", line 31, in updateConsole
ConsoleWindow.insertText(console, string)
NameError: name 'console' is not defined
Как обновить окно консоли из моего главного окна.Или есть какой-то альтернативный подход, который я могу использовать для этого случая.