Come farei per bloccare un widget Text
in modo che l'utente possa solo selezionare e copiare il testo da esso, ma sarei ancora in grado di inserire del testo nello Text
da una funzione o simile?Come disabilitare l'input per un widget di testo ma consentire l'input programmatico?
risposta
Hai provato semplicemente a disabilitare il widget di testo?
text_widget.configure(state="disabled")
Su alcune piattaforme, è inoltre necessario aggiungere un vincolante per <1>
per dare l'attenzione al widget, altrimenti l'evidenziazione per la copia non viene visualizzato:
text_widget.bind("<1>", lambda event: text_widget.focus_set())
Se si disattiva il widget , per inserire programatically è sufficiente
- cambiare lo stato del widget per
NORMAL
- I NSERT il testo, e quindi
- cambiare lo stato di nuovo a
DISABLED
Finché non si chiama update
nel bel mezzo di quella allora non c'è modo per l'utente sia in grado di entrare in qualsiasi cosa in modo interattivo.
Scusa se sono in ritardo per la festa ma ho trovato questa pagina cercando la stessa soluzione che hai.
Ho scoperto che se si "disabilita" il widget Testo di default e poi "normale" esso all'inizio di una funzione che gli dà l'input e lo "disabilita" di nuovo alla fine della funzione.
def __init__():
self.output_box = Text(fourth_frame, width=160, height=25, background="black", foreground="white")
self.output_box.configure(state="disabled")
def somefunction():
self.output_box.configure(state="normal")
(some function goes here)
self.output_box.configure(state="disable")
sono incappato lo stato = state = soluzione "normale"/"disabile", così, però poi non si riesce a selezionare e copiare il testo da esso. Finalmente ho trovato la soluzione di seguito da: Is there a way to make the Tkinter text widget read only?, e questa soluzione consente di selezionare e copiare il testo e seguire i collegamenti ipertestuali.
import Tkinter
root = Tkinter.Tk()
readonly = Tkinter.Text(root)
readonly.bind("<Key>", lambda e: "break")
Sì, sì, ma secondo i documenti, che non consente l'inserimento di nulla, anche da funzioni e così via. –
@PsychicOak: ovviamente. Ma per inserire programmaticamente tutto ciò che devi fare è impostare lo stato su "normale", inserire il testo, quindi resettare lo stato su "disabilitato". Ho aggiornato la mia risposta per includere tali informazioni. –
* sospiro * mi sento stupido ora>.> Haha grazie! otterrete i vostri punti quando sono autorizzato ad accettare xD –