从其他类访问标签?

时间:2014-03-16 19:33:57

标签: python class tkinter label global

我这里有两个类,我希望子类中的标签可以在子类中使用。我已经尝试将标签变成一个全局变量,但除非我做错了(我只使用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()

1 个答案:

答案 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)