当按下 Class3 的按钮时,我无法让此文本框打印文本。如果我从 Class2 调用相同的函数,那么一切都很好。但从3年级开始就没有那么多了。我仍然可以调用该函数(它甚至打印到控制台),但它不会更改文本窗口。无法弄清楚我错过了什么。我仍在学习 python 课程,因此很难在线表达我的问题以获得所需的结果。
import tkinter as tk
def mainGUI():
app = Class1()
app.mainloop()
class Class1(tk.Tk):
def __init__(self):
super().__init__()
self.title("test")
frame1 = Class2(self)
frame1.pack()
frame2 = Class3(self)
frame2.pack()
class Class2(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
button1 = tk.Button(self, text='Class2 Button', command=self.doStuff)
button1.pack()
self.text_box = tk.Text(self)
self.text_box.pack()
def doStuff(self):
self.text_box.insert(tk.END, "You Pushed the button!\n")
print("I can print to console though")
class Class3(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
button2 = tk.Button(self, text='Class3 Button', command=Class2(parent).doStuff)
button2.pack()
mainGUI()
Class2 和 Class3 都传递根对象。 他们不需要了解彼此的任何信息——任何连接都应该发生在根类中。
记住,您需要调用该对象的方法,而不仅仅是类。 您现在要做的是在回调中创建一个全新的 Class2 对象——它不是您上面创建的 Class2 对象。 如果Class3需要发送给Class2,正确的方法是让Class3在根中调用回调,然后让根将其转发给需要它的人。 例如:
import tkinter as tk
def mainGUI():
app = Class1()
app.mainloop()
class Class1(tk.Tk):
def __init__(self):
super().__init__()
self.title("test")
self.frame1 = Class2(self)
self.frame1.pack()
self.frame2 = Class3(self)
self.frame2.pack()
def class3_button(self):
self.frame1.doStuff()
class Class2(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
button1 = tk.Button(self, text='Class2 Button', command=self.doStuff)
button1.pack()
self.text_box = tk.Text(self)
self.text_box.pack()
def doStuff(self):
self.text_box.insert(tk.END, "You Pushed the button!\n")
print("I can print to console though")
class Class3(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
button2 = tk.Button(self, text='Class3 Button', command=parent.class3_button)
button2.pack()
mainGUI()