2010-05-05 1 views
2

Я хотел бы создать STRINGVAR(), который выглядит примерно так:Как включить статический текст в StringVar() и все еще обновлять его до изменений переменных?

someText = "The Spanish Inquisition" # Here's a normal variable whose value I will change 

в конечном счете

TkEquivalent = StringVar() # and here's the StringVar() 

TkEquivalent.set(string(someText)) #and here I set it equal to the normal variable. When someText changes, this variable will too... 

ОДНАКО:

TkEquivalent.set("Nobody Expects " + string(someText)) 

Если я это сделаю, то STRINGVAR() больше не будет автоматически обновляться! Как включить этот статический текст и все еще иметь обновление StringVar(), чтобы отразить изменения, внесенные в someText?

Благодарим за помощь.

+0

Существует не хватает кода, чтобы дать контекст на ваш вопрос. Угадав, что вы пытаетесь спросить, связанные переменные Tkinter не будут обновляться до тех пор, пока основной цикл tk не простаивает. Если вы застряли в коде Python, тогда цикл событий не выполняется, и никакая информация не будет передаваться между пользовательским интерфейсом и связанными переменными. Это хорошо описано на странице http://infohost.nmt.edu/tcc/help/pubs/tkinter/control-variables.html. – msw

ответ

4

STRINGVAR не связывается с именем Python (то, что вы бы назвали переменную), но с виджетом Tkinter, например:

a_variable= Tkinter.StringVar() 
an_entry= Tkinter.Entry(textvariable=a_variable) 

С тех пор, любое изменение a_variable через его .set метод будет отражен в содержании an_entry, и любая модификация содержимого an_entry (например, пользовательским интерфейсом) также обновит содержимое a_variable.

Однако, если это не то, что вы хотите, вы можете иметь два (или более) ссылки на тот же STRINGVAR в коде:

var1= var2= Tkinter.StringVar() 
var1.set("some text") 
assert var1.get() == var2.get() # they'll always be equal