Tkinter 从另一个窗口更新窗口的文本小部件
我正在创建一个tkinter应用程序,希望在该应用程序中添加一个新窗口,以便更新当前操作的状态。我的意图是,每当一个事件完成时,我都想将其更新为一个单独窗口的文本小部件,该窗口并行运行。类似于控制台窗口,便于用户阅读和理解应用程序/错误等的状态 我对python和Tkinter相当陌生,我的方法如下:Tkinter 从另一个窗口更新窗口的文本小部件,tkinter,Tkinter,我正在创建一个tkinter应用程序,希望在该应用程序中添加一个新窗口,以便更新当前操作的状态。我的意图是,每当一个事件完成时,我都想将其更新为一个单独窗口的文本小部件,该窗口并行运行。类似于控制台窗口,便于用户阅读和理解应用程序/错误等的状态 我对python和Tkinter相当陌生,我的方法如下: from tkinter import * from tkinter import ttk from Console import ConsoleWindow class Main:
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 *
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'
我尝试将ConsoleWindow实例添加到insertText()
并得到以下错误
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
如何从主窗口更新控制台窗口。或者是否有其他方法可以用于此案例 您正在调用类本身的
insertText()
,而不是您创建的类的实例。嘿,jason,谢谢。是的,这是有效的,问题是,我创建的控制台窗口实例不是Main的一部分,或者只是在runConsole函数中,当我将它与主窗口self.console=ConsoleWindow(ConsoleWindow)关联时。现在这个self允许我使用实例调用它的函数。谢谢