我这里有两个类,我希望子类中的标签可以在子类中使用。我已经尝试将标签变成一个全局变量,但除非我做错了(我只使用Python两周),否则它似乎无法工作。这是代码。
from tkinter import *
class Parent_Class(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.grid()
self.create_labels()
def create_labels(self):
self.label_1 = Label(self)
self.label_1["text"] = "I'm in the Parent Class."
self.label_1.grid(row = 0, column = 0, sticky = W)
class Child_Class():
def __init__(self):
self.change_label()
def change_label(self):
label_1["text"] = "I'm in the Child Class."
window = Tk()
window.title("Label Test")
window.geometry("250x250")
app = Parent_Class(window)
window.mainloop()
答案 0 :(得分:0)
您永远不应该直接更改创建它的类之外的窗口小部件。如果您选择修改该原始类,则最终必须更改两个或更多类。相反,您为类提供了一个其他类可以使用的接口。你可以直接访问标签,但它会产生所谓的"紧耦合"
无论如何,使其工作的关键是你必须向孩子传递对父母的引用。
它的工作方式与此类似,使用界面。同样,您可以直接访问parent.label
而不是调用界面,但这通常是一个坏主意。
class Parent_Class(...):
def __init__(self, ...):
...
self.label = Label(...)
...
def set_label(self, string):
self.label.configure(text=string)
class Child_Class(...):
def __init__(self, parent):
...
self.parent = parent
...
def change_label(self):
self.parent.set_label("I'm in the Child Class")
# of, if tight coupling is acceptable to you:
# self.parent.label.configure(text="I'm in the Child Class")
...
p = Parent_Class(...)
c = Child_Class(parent=p)