从tkinter

时间:2016-05-24 12:50:50

标签: python tkinter widget

我在这个网站和其他网站上搜索过,我仍然无法弄清楚如何更改位于不同框架上的标签文本。这是我的代码:

from tkinter import *

class mainW(Tk):
    def __init__(self, parent):
        Tk.__init__(self, parent)
        self.parent = parent
        self.widgets()
    def widgets(self):
        self.left = leftF(self)
        self.left.grid(row=0, column=0)
        self.right = rightF(self)
        self.right.grid(row=0, column=1)

class leftF(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent, bg="blue")
        self.parent = parent
        self.leftWidgets()
    def leftWidgets(self):
        self.Label = Label(self, text="Hello", bg="red", fg="white")
        self.Label.grid(row=0, column=0, padx=5, pady=5)

class rightF(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent, bg="white")
        self.parent = parent
        self.rightWidgets()
    def rightWidgets(self):
        self.Button = Button(self, text="change text", bg="yellow", fg="black", command=self.action)
        self.Button.grid(row=0, column=0, padx=5, pady=5)
    def action(self):
        self.targetFrame = leftF(self)
        self.targetLabel = self.targetFrame.Label
        self.targetLabel.config(text="World")

if __name__=="__main__":
    mainW(None).mainloop()

基本上,分配给驻留在 rightF 上的按钮的操作应该会更改 leftF 上标签的文字。如果有人能指引我走向正确的方向,我真的很感激。

谢谢。

1 个答案:

答案 0 :(得分:3)

问题是您正在使用

创建新对象
self.targetFrame = leftF(self)

并没有引用原始的。将动作功能更改为

    def action(self):
        self.parent.left.Label.config(text="World")

它会起作用。