使用 StringVar 的跟踪条目对标签没有影响
Tracing Entry that uses a StringVar has no effect on Label
学习使用 Tkinter 并遵循在线教程。这是一个输入文本的示例,然后标签将相应地更新到输入文本字段。
我在 Python3、Mac 和 Raspberry Pi 中尝试了它,但我没有看到跟踪的效果,因此标签没有被修改入口。任何帮助将不胜感激(或任何其他如何一起使用 Entry 和 Trace 的简单示例)
谢谢。
from tkinter import *
class HelloWorld:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.button = Button(
frame, text="Hello", command=self.button_pressed
)
self.button.pack(side=LEFT, padx=5)
self.label = Label(frame, text="This is a label")
self.label.pack()
a_var = StringVar()
a_var.trace("w", self.var_changed)
self.entry = Entry(frame,textvariable=a_var)
self.entry.pack()
def button_pressed(self):
self.label.config(text="I've been pressed!")
def var_changed(self, a, b, c):
self.label.config(text=self.entry.get())
def main():
root = Tk()
root.geometry("250x150+300+300")
ex = HelloWorld(root)
root.mainloop()
if __name__ == '__main__':
main()
问题是您正在为 a_var
使用局部变量,而在 Mac 上它正在变得 garbage-collected。保存对变量的引用(例如:self.a_var
而不仅仅是 a_var
)。
self.a_var = StringVar()
self.a_var.trace("w", self.var_changed)
self.entry = Entry(frame,textvariable=self.a_var)
self.entry.pack()
注意:如果您只想保持标签和条目同步,则不需要使用跟踪。你可以 link 他们给他们相同的 textvariable
:
self.entry = Entry(frame, textvariable=self.a_var)
self.label = Label(frame, textvariable=self.a_var)
学习使用 Tkinter 并遵循在线教程。这是一个输入文本的示例,然后标签将相应地更新到输入文本字段。
我在 Python3、Mac 和 Raspberry Pi 中尝试了它,但我没有看到跟踪的效果,因此标签没有被修改入口。任何帮助将不胜感激(或任何其他如何一起使用 Entry 和 Trace 的简单示例)
谢谢。
from tkinter import *
class HelloWorld:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.button = Button(
frame, text="Hello", command=self.button_pressed
)
self.button.pack(side=LEFT, padx=5)
self.label = Label(frame, text="This is a label")
self.label.pack()
a_var = StringVar()
a_var.trace("w", self.var_changed)
self.entry = Entry(frame,textvariable=a_var)
self.entry.pack()
def button_pressed(self):
self.label.config(text="I've been pressed!")
def var_changed(self, a, b, c):
self.label.config(text=self.entry.get())
def main():
root = Tk()
root.geometry("250x150+300+300")
ex = HelloWorld(root)
root.mainloop()
if __name__ == '__main__':
main()
问题是您正在为 a_var
使用局部变量,而在 Mac 上它正在变得 garbage-collected。保存对变量的引用(例如:self.a_var
而不仅仅是 a_var
)。
self.a_var = StringVar()
self.a_var.trace("w", self.var_changed)
self.entry = Entry(frame,textvariable=self.a_var)
self.entry.pack()
注意:如果您只想保持标签和条目同步,则不需要使用跟踪。你可以 link 他们给他们相同的 textvariable
:
self.entry = Entry(frame, textvariable=self.a_var)
self.label = Label(frame, textvariable=self.a_var)