Comment rendre le widget Tkinter Text en lecture seule
-
Mettre l’état
Text
àdisable
pour que TkinterText
soit en lecture seule -
Liez toute pression de touche à la fonction
break
pour que TkinterText
soit en lecture seule
Nous allons présenter des méthodes pour rendre le widget Tkinter Text en lecture seule,
- Définissez l’état
Text
comme étantdisable
. - Lier n’importe quelle pression de touche à la fonction
break
.
Mettre l’état Text
à disable
pour que Tkinter Text
soit en lecture seule
Le widget Text
devient en lecture seule après que son état soit défini comme disable
.
import tkinter as tk
root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0,"ABCDEF")
readOnlyText.configure(state='disabled')
readOnlyText.pack()
root.mainloop()
L’état par défaut d’un widget Text
est NORMAL
, ce qui signifie que l’utilisateur peut y éditer, ajouter, insérer ou modifier du contenu texte.
readOnlyText.configure(state='disabled')
Vous devez changer l’état du widget Text
en DISABLED
pour qu’il soit en lecture seule. Toute tentative de changer le texte à l’intérieur de ce widget sera silencieusement ignorée.
Vous devez changer l’état de disabled
à normal
si vous avez l’intention de mettre à jour le contenu du widget Text
, sinon, il reste en lecture seule.
Liez toute pression de touche à la fonction break
pour que Tkinter Text
soit en lecture seule
Si nous lions n’importe quelle touche à la fonction qui ne retourne que break
au widget Text
, nous pourrions obtenir le même résultat que le Text
devient en lecture seule.
import tkinter as tk
root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0,"ABCDEF")
readOnlyText.bind("<Key>", lambda a: "break")
readOnlyText.pack()
root.mainloop()
La différence entre cette solution et la solution ci-dessus est que le CTRL+C ne fonctionne pas ici. Cela signifie que vous ne pouvez ni éditer le contenu ni le copier.
Nous devons faire l’exception de CTRL+C à la fonction liant au Text
si CTRL+C est désiré.
import tkinter as tk
def ctrlEvent(event):
if(12==event.state and event.keysym=='c' ):
return
else:
return "break"
root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0,"ABCDEF")
readOnlyText.bind("<Key>", lambda e: ctrlEvent(e))
readOnlyText.pack()
root.mainloop()