使用Python3跟踪和输入Tkinter

时间:2018-04-02 22:30:54

标签: python python-3.x macos tkinter raspberry-pi3

学习使用Tkinter并遵循在线教程。这是一个给出文本的示例,然后标签将相应地更新为输入文本字段。 我在Mac上和Raspberry Pi上的Python3中尝试它并且我没有看到跟踪的效果,因此标签不会被Entry修改。任何帮助将是欣赏(或任何其他简单的如何一起使用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()  

1 个答案:

答案 0 :(得分:1)

问题是你正在为memcpy()使用局部变量,而在Mac上它正在被垃圾收集。保存对变量的引用(例如:a_var而不仅仅是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()

来链接它们
textvariable