2010-03-26 2 views
8

Я пытаюсь связать переменный с въездным виджетом Tkinter, таким образом, что:Как подключить переменную к виджету ввода?

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

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

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

+2

Возможно, вы можете предложить альтернативу? :) –

+4

Что случилось с tkinter? Согласно домашней странице python, это «... де-факто стандартный пакет GUI для Python». И «наиболее часто используемый». – Sano98

+0

Управляющие переменные: http://infohost.nmt.edu/tcc/help/pubs/tkinter/control-variables.html –

ответ

12

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

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

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() 
+0

Спасибо, это идет в правильном направлении, но для работы с переменными мне нужно преобразовать их в обычные переменные python. Ваш пример работает, потому что виджеты имеют один и тот же текстовый файл. Но что бы вы сделали, например, если бы вы хотели распечатать содержимое своей записи на стандартный вывод всякий раз, когда он менялся вместо того, чтобы писать его на метке tkinter? – Sano98

+1

Вы делаете это: 'text_entry.bind ('', обработчик)' где 'handler' - это функция, которая назначает вашу переменную python. См. Мой ответ. – Paul

+0

@ Sano98, я отредактировал ответ, вы можете легко отслеживать переменные для чтения/записи. –

Смежные вопросы