Hoe Tkinter Text-widget alleen-lezen te maken

  1. Stel de Text staat disable in om Tkinter Text alleen-lezen te maken
  2. Bind elke toetsaanslag aan de break functie om Tkinter Text alleen-lezen te maken

We zullen methoden introduceren om de Tkinter-tekstwidget alleen-lezen te maken,

Een super simpele manier om je webt...
Een super simpele manier om je webteksten mobiel vriendelijk te maken
  1. Stel de Text status in disable
  2. Bind elke toetsaanslag aan de break functie

Stel de Text staat disable in om Tkinter Text alleen-lezen te maken

De Text widget wordt alleen-lezen nadat de status ervan is ingesteld 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()

De standaardstatus van een Text widget is NORMAL , wat betekent dat de gebruiker tekst erin kan bewerken, toevoegen, invoegen of bewerken.

readOnlyText.configure(state='disabled')

U moet de Text widgetstatus wijzigen DISABLED om deze alleen-lezen te maken. Elke poging om de tekst in die widget te wijzigen, wordt stilzwijgend genegeerd.

Waarschuwing

U moet de status wijzigen van disabled in normal als u van plan bent de Text inhoud van de widget bij te werken , anders blijft deze alleen-lezen.

Bind elke toetsaanslag aan de break functie om Tkinter Text alleen-lezen te maken

Als we een toetsaanslag binden aan de functie die alleen terugkeert break naar de Text widget, kunnen we hetzelfde resultaat krijgen dat de Text alleen-lezen wordt.

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()

Aandacht

Het verschil tussen deze oplossing en de bovenstaande oplossing is dat het CTRL+C hier niet werkt. Dit betekent dat u de inhoud niet kunt bewerken of kopiëren.

We moeten de uitzondering van CTRL+C de functie bindend maken voor de Text if CTRL+C is gewenst.

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()