Python: Come ottenere un testo Entry aggiornata da utilizzare in un comando rilegata ad esso?

StackOverflow https://stackoverflow.com/questions/4287553

  •  28-09-2019
  •  | 
  •  

Domanda

Si consideri il seguente codice:

text = Entry(); text.pack()
def show(e):
    print text.get()
text.bind('<Key>', show)

dire Let ho messo le lettere ABC nel Entry, uno per uno. L'uscita potrebbe essere:

>>> 
>>> A
>>> AB

Si noti che quando si preme A, esso stampa una stringa vuota. Quando premo B, stampa A, non AB. Se io non stampa nulla dopo C, non sarà mai mostrato. Sembra che il contenuto voce viene aggiornata solo dopo che il comando binded è tornato, quindi non posso utilizzare il valore effettivo ingresso in quella funzione.

C'è un modo per ottenere un valore di inserimento aggiornato per utilizzare all'interno di un comando rilegata?

È stato utile?

Soluzione

Si potrebbe sostituire l'evento <Key> con l'evento <KeyRelease>. Che dovrebbe funzionare.

Ecco un elenco di eventi: http: / /infohost.nmt.edu/tcc/help/pubs/tkinter/events.html#event-types

Altri suggerimenti

La ragione di questo ha a che fare con tk "bindtags". Attacchi sono associati con i tag, e le associazioni vengono elaborati in ordine di tag. Entrambi i nomi dei widget e le classi di widget sono i tag, e vengono elaborati in questo ordine (binding widget di specifici prime, attacchi di seconda classe).

Per questo motivo, ogni volta che si preme un tasto la vostra specifica widget di legame scatterà prima della classe di legame ha la possibilità di modificare il widget di.

Ci sono molte soluzioni. Il più semplice è quello di legarsi a <KeyRelease> in quanto le associazioni di classe avvengono sulla pressione di un tasto. Ci sono altre soluzioni che coinvolgono sia aggiungendo o riorganizzando i tag legano, o utilizzando il built-in funzionalità di convalida dei dati del widget ingresso. Che è meglio dipende da cosa si sta realmente cercando di realizzare.

Per ulteriori informazioni sulle funzioni di validazione dei dati, vedere questa domanda: interattivo di convalida Entrata contenuto dei widget in tkinter

Per una risposta più completa, vedere Tkinter: insieme StringVar dopo eventi, tra cui il tasto premuto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top