Как связать переменную с виджетом Entry? - PullRequest
8 голосов
/ 26 марта 2010

Я пытаюсь связать переменную с виджетом записи Tkinter таким образом:

  1. Всякий раз, когда я изменяю значение («содержимое») записи, главным образом путем ввода чего-либо в нее, переменной автоматически присваивается значение того, что я набрал. Без меня сначала нужно нажать кнопку «Обновить значение» или что-то в этом роде.

  2. Всякий раз, когда переменная изменяется (какой-либо другой частью программы), я хочу, чтобы отображаемое значение ввода корректировалось автоматически. Я считаю, что это может работать через textvariable.

Я прочитал пример на http://effbot.org/tkinterbook/entry.htm,, но он не совсем помогает мне в том, что я имею в виду. У меня есть ощущение, что есть способ обеспечить первое условие с помощью записи "validate". Есть идеи?

1 Ответ

12 голосов
/ 26 марта 2010

Я думаю, вы хотите что-то подобное. В приведенном ниже примере я создал переменную myvar и присвоил ей значение textvariable для виджетов Label и Entry. Таким образом, оба будут связаны, и изменения в виджете «Ввод» будут автоматически отражаться в метке.

Вы также можете установить трассировку для переменных, например, написать на стандартный вывод.

from tkinter import *


root = Tk()
root.title("MyApp")

myvar = StringVar()

def mywarWritten(*args):
    print "mywarWritten",myvar.get()

myvar.trace("w", mywarWritten)

label = Label(root, textvariable=myvar)
label.pack()

text_entry = Entry(root, textvariable=myvar)
text_entry.pack()

root.mainloop()
...