Pergunta

Estou tentando associar uma variável a um widget de entrada do Tknter, de uma maneira que:

  1. Sempre que altero o valor (o "conteúdo") da entrada, principalmente digitando algo nele, a variável recebe automaticamente o valor do que eu digitei. Sem que eu precise apertar um botão "Atualizar valor" ou algo assim primeiro.

  2. Sempre que a variável é alterada (por alguma outra parte da programação), quero que o valor de entrada exibido seja ajustado automaticamente. Eu acredito que isso poderia funcionar através da textVariable.

Eu li o exemplo em http://effbot.org/tknterbook/entry.htm, mas não está me ajudando exatamente pelo que tenho em mente. Tenho a sensação de que existe uma maneira de garantir a primeira condição usando o "Validate" da entrada. Alguma ideia?

Foi útil?

Solução

Eu acho que você quer algo assim. No exemplo abaixo, criei uma variável myvar e atribuiu que fosse textvariable de ambos a Label e Entry widgets. Dessa forma, ambos são acoplados e as alterações no widget de entrada refletirão automaticamente no rótulo.

Você também pode defina rastreamento em variáveis, por exemplo, para escrever para stdout.

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()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top