Umgebung: Ubuntu 18.04.5 LTS (Windows Subsystem for Linux) Python 3.8.0 VcXsrv 1.20.5.1
Wenn Sie in Tkinter of Python die Check-Taste (Check-Taste) aktivieren, wird das Eingabefeld (Eintrag) aktiviert und Sie können eingeben. Wenn diese Option nicht aktiviert ist, können Sie sie nicht bearbeiten.
import tkinter as tk
def change_state():
if bool_check.get():
#Wenn aktiviert
entry.config(state='normal')
else:
#Wenn nicht markiert
entry.config(state='disabled')
root = tk.Tk()
entry = tk.Entry()
entry.config(state='disabled') #Anfangs ungültig
bool_check = tk.BooleanVar()
bool_check.set(False) #Zuerst keine Prüfung
check = tk.Checkbutton(variable=bool_check, command=change_state)
check.pack()
entry.pack()
root.mainloop()
Definieren Sie die Funktion change_state.
Der Variablenname kann beliebig sein, aber weisen Sie der Variablen bool_check beispielsweise tk.BooleanVar () zu. Erstellen Sie ein Kontrollkästchen, indem Sie die Variable bool_check an das Variablenargument von tk.Checkbutton () und die Funktion change_state an das Befehlsargument übergeben.
Das Vorhandensein oder Fehlen der Prüfung wird von bool_check.get () als boolescher Wert zurückgegeben. Wenn das Kontrollkästchen deaktiviert ist, wird change_state () aufgerufen.
In change_state () wird der Status des erstellten Eintrags geändert, je nachdem, ob er aktiviert ist oder nicht.
Wenn Sie bool_check oder entry als Argument an change_state () übergeben können, können Sie anscheinend dasselbe mit zwei oder mehr Eingabefeldern tun. Zum Beispiel jedoch
def change_state(bool_check, entry):
if bool_check.get():
entry.config(state='normal')
else:
entry.config(state='disabled')
Definieren Sie die Funktion change_state mit einem Argument wie
tk.Checkbutton(command=change_state(bool_check, entry))
Selbst wenn Sie eine Funktion mit einem Argument an das Befehlsargument von tk.Checkbutton () übergeben, funktioniert dies nicht ordnungsgemäß. Übergeben Sie einen Lambda-Ausdruck an den Befehl, um ordnungsgemäß zu funktionieren. Das ist,
import tkinter as tk
def change_state(bool_check, entry):
if bool_check.get():
entry.config(state='normal')
else:
entry.config(state='disabled')
root = tk.Tk()
#Der erste
entry1 = tk.Entry()
entry1.config(state='disabled')
bool_check1 = tk.BooleanVar()
bool_check1.set(False)
check1 = tk.Checkbutton(text='1', variable=bool_check1,
command=lambda: change_state(bool_check1, entry1))
check1.pack()
entry1.pack()
#Zweite
entry2 = tk.Entry()
entry2.config(state='disabled')
bool_check2 = tk.BooleanVar()
bool_check2.set(False)
check2 = tk.Checkbutton(text='2', variable=bool_check2,
command=lambda: change_state(bool_check2, entry2))
check2.pack()
entry2.pack()
root.mainloop()
Ich bin der Meinung, dass diese Schreibweise besser ist, da die Funktion change_state nicht von globalen Variablen abhängt.
Wenn diese Option nicht aktiviert ist, wird die eingegebene Zeichenfolge gelöscht und "ungültig" angezeigt.
import tkinter as tk
def change_state():
if bool_check.get():
#Wenn aktiviert
entry.config(state='normal')
entry.delete(0, tk.END) #Nachdem ich es normal gemacht habe"Ungültig"Löschen
else:
#Wenn nicht markiert
entry.delete(0, tk.END) #Löschen Sie die Zeichenfolge vom 0. Zeichen bis zum Ende
entry.insert(0, "Ungültig") #0. Zeichen des Eintrags"Ungültig"Einfügen
entry.config(state='disabled') #einfügen und dann deaktivieren
root = tk.Tk()
entry = tk.Entry()
entry.insert(0, "Ungültig") #0. Zeichen des Eintrags"Ungültig"Einfügen
entry.config(state='disabled') #einfügen und dann deaktivieren
bool_check = tk.BooleanVar()
bool_check.set(False)
check = tk.Checkbutton(variable=bool_check, command=change_state)
check.pack()
entry.pack()
root.mainloop()
Es scheint, dass es angewendet werden kann, beispielsweise indem ein Anfangswert angegeben wird.
Recommended Posts