Hoe Tkinter Text-widget alleen-lezen te maken

Jinku Hu 12 april 2022 20 december 2019
  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
Hoe Tkinter Text-widget alleen-lezen te maken

We zullen methoden introduceren om de Tkinter-tekstwidget alleen-lezen 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()
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn