1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
from tkinter import *
def show_value():
label.config(text=f"Frame1的值: {frame1.entry.get()}, Frame2的值: {frame2.my_var}")
root = Tk()
# Frame 1 - 使用Entry绑定变量
frame1 = Frame(root, bd=2, relief=GROOVE)
frame1.pack(padx=10, pady=10)
Label(frame1, text="输入框:").pack(side=LEFT)
frame1.entry = Entry(frame1) # 动态添加属性
frame1.entry.pack(side=LEFT)
# Frame 2 - 自定义类绑定属性
class ValueFrame(Frame):
def __init__(self, master=None):
super().__init__(master, bd=2, relief=GROOVE)
self.options = ["选项1", "选项2", "选项3"]
self.var = StringVar(value=self.options[0]) # 初始化 self.var
Label(self, text="选择:").pack(side=LEFT)
OptionMenu(self, self.var, *self.options).pack()
self.my_var = "默认值" # 调用 setter 方法,确保 self.var 已初始化
@property
def my_var(self):
return self.var.get()
@my_var.setter
def my_var(self, value):
self.var.set(value)
frame2 = ValueFrame(root)
frame2.pack(padx=10, pady=10)
# 显示按钮
Button(root, text="显示值", command=show_value).pack(pady=10)
label = Label(root)
label.pack()
root.mainloop()
|