从 tkinter 中的不同框架访问小部件
Accessing a widget from a different frame in tkinter
我在本网站和其他网站上进行了搜索,但仍然无法弄清楚如何更改驻留在不同框架上的标签的文本。这是我的代码:
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 上的标签文本。如果有人能指引我正确的方向,我将不胜感激。
谢谢。
问题是您正在使用
创建一个新对象
self.targetFrame = leftF(self)
并且没有引用原始的。将动作函数改为
def action(self):
self.parent.left.Label.config(text="World")
它会起作用。
我在本网站和其他网站上进行了搜索,但仍然无法弄清楚如何更改驻留在不同框架上的标签的文本。这是我的代码:
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 上的标签文本。如果有人能指引我正确的方向,我将不胜感激。
谢谢。
问题是您正在使用
创建一个新对象self.targetFrame = leftF(self)
并且没有引用原始的。将动作函数改为
def action(self):
self.parent.left.Label.config(text="World")
它会起作用。