【发布时间】:2019-09-27 14:33:16
【问题描述】:
我正在学习一些 python 和 tkinter,并尝试了一个非常简单的示例应用程序。
一个 tkinter GUI、一个显示文本的标签和下面的 2 个按钮。 这些按钮应该更改标签中的文本,因为它通过 textvariable 参数链接到 StringVar...
应该发生什么,简单地说: 按“A”按钮,标签上将显示“A” 按“B”按钮,标签上会显示“B”
但是当我按下按钮“A”时,程序给了我 NameError: name 'display_frame' is not defined.
无法弄清楚发生了什么。我正在访问对象属性...
obs:由于按钮A有问题,未尝试配置按钮B的功能
import tkinter
class TkinterWindow(tkinter.Tk):
def __init__(self):
super().__init__()
self.rowconfigure(0, weight=1)
self.columnconfigure(0, weight=1)
self.configure(background='orange')
class DisplayFrame(tkinter.Frame):
def __init__(self, parent):
super().__init__(parent)
self.rowconfigure(0, weight=1)
self.columnconfigure(0, weight=1)
self.configure(background='cyan')
self.grid(row=0, column=0, pady=5, padx=5, sticky='nsew')
self.text = tkinter.StringVar()
self.text.set('Hello')
self.display = tkinter.Label(self, textvariable=self.text, font=15, bg="#bebebe", relief="groove", bd=5, height=5 )
self.display.grid(sticky='nsew')
class ButtonsFrame(tkinter.Frame):
def __init__(self, parent):
super().__init__(parent)
self.rowconfigure(0, weight=1)
self.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=1)
self.configure(background='green')
self.grid(row=1, column=0, pady=5, padx=5, sticky='nsew')
self.button_A = tkinter.Button(self, text='A', command=self.write_A)
self.button_A.grid(row=0, column=0, padx=15, sticky='nsew')
self.button_B = tkinter.Button(self, text='B')
self.button_B.grid(row=0, column=1, padx=15, sticky='nsew')
def write_A(self):
display_frame.text.set('A')
def main():
window = TkinterWindow()
display_frame = DisplayFrame(window)
buttons_frame = ButtonsFrame(window)
window.mainloop()
main()
【问题讨论】:
-
如果您将
display_frame全球化,那么它会起作用,但这不是推荐的方法。正确的做法是在DisplayFrame和ButtonsFrame之间建立连接以访问彼此的属性。
标签: python-3.x tkinter