Cochez le bouton Vérifier dans Tkinter pour autoriser la modification de l'entrée

environnement: Ubuntu 18.04.5 LTS (Windows Subsystem for Linux) Python 3.8.0 VcXsrv 1.20.5.1

Cible

Si vous cochez le bouton de vérification (bouton Vérifier) dans Tkinter de Python, le champ de saisie (Entrée) sera activé et vous pouvez entrer. Si elle n'est pas cochée, vous ne pourrez pas modifier. check.png checkme.png

Méthode

import tkinter as tk

def change_state():
    if bool_check.get():
        #Une fois coché
        entry.config(state='normal')
    else:
        #Lorsqu'elle n'est pas cochée
        entry.config(state='disabled')

root = tk.Tk()

entry = tk.Entry()
entry.config(state='disabled')  #Initialement invalide

bool_check = tk.BooleanVar()
bool_check.set(False)  #Pas de contrôle au début
check = tk.Checkbutton(variable=bool_check, command=change_state)

check.pack()
entry.pack()

root.mainloop()

Définissez la fonction change_state.

Le nom de la variable peut être n'importe quoi, mais par exemple, assignez tk.BooleanVar () à la variable bool_check. Créez une case à cocher en passant la variable bool_check à l'argument variable de tk.Checkbutton () et la fonction change_state à l'argument de commande.

La présence ou l'absence du contrôle est renvoyée sous forme de valeur booléenne par bool_check.get (). Si elle n'est pas cochée, change_state () sera appelé.

Dans change_state (), l'état de l'entrée créée est modifié selon qu'elle est cochée ou non.

Lorsque vous voulez en faire deux ou plus

Si vous pouvez passer bool_check ou entry comme argument à change_state (), il semble que vous puissiez faire la même chose avec deux champs d'entrée ou plus. likethis.png Cependant, par exemple

def change_state(bool_check, entry):
    if bool_check.get():
        entry.config(state='normal')
    else:
        entry.config(state='disabled')

Définissez la fonction change_state avec un argument comme

tk.Checkbutton(command=change_state(bool_check, entry))

Même si vous passez une fonction avec un argument à l'argument de commande de tk.Checkbutton () like, cela ne fonctionne pas correctement. Pour fonctionner correctement, passez une expression lambda à command. C'est,

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

#Le premier
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()

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

Je pense que cette façon d'écrire est meilleure car la fonction change_state ne dépend pas de variables globales.

Application facile

Si elle n'est pas cochée, la chaîne de caractères saisie sera supprimée et «invalide» sera affiché.

aaa.png mukou.png
import tkinter as tk

def change_state():
    if bool_check.get():
        #Une fois coché
        entry.config(state='normal')
        entry.delete(0, tk.END)  #Après l'avoir rendu normal"Invalide"Effacer
    else:
        #Lorsqu'elle n'est pas cochée
        entry.delete(0, tk.END)  #Supprimer la chaîne de caractères du 0e caractère à la fin
        entry.insert(0, "Invalide")  #0e caractère de l'entrée"Invalide"Insérer
        entry.config(state='disabled')  #insérer puis désactiver

root = tk.Tk()

entry = tk.Entry()
entry.insert(0, "Invalide")  #0e caractère de l'entrée"Invalide"Insérer
entry.config(state='disabled')  #insérer puis désactiver

bool_check = tk.BooleanVar()
bool_check.set(False)
check = tk.Checkbutton(variable=bool_check, command=change_state)

check.pack()
entry.pack()

root.mainloop()

Il semble que cela puisse être appliqué, comme donner une valeur initiale.

Recommended Posts

Cochez le bouton Vérifier dans Tkinter pour autoriser la modification de l'entrée
Comment changer la couleur du seul bouton pressé avec Tkinter
Utilisez tkinter pour déplacer le code de sortie en tant que "A et prétendant être B" en python
Code de test pour vérifier les liens brisés dans la page
Maîtrisez le type avec Python? (Quand faire la vérification de type)
Créons une fonction pour maintenir Button dans Tkinter
[Python] Résolution du problème d'importation dû à la différence des points d'entrée
Comment vérifier la taille de la mémoire d'une variable en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
Assurez-vous que python peut convertir / convertir une chaîne de caractères en int
Programmation pour combattre dans le monde ~ 5-5,5-6
Programmer pour combattre dans le monde 5-3
Programmation pour combattre dans le monde - Chapitre 4
Dans la commande python, python pointe vers python3.8
Vérifiez le résumé des données dans CASTable
Essayez Cython dans les plus brefs délais
Programmation pour combattre dans le monde ~ 5-2
Explication d'approche pour que les débutants soient dans le top 1,5% (0,83732) dans Kaggle Titanic_3
Comment vérifier le GAE local à partir du navigateur iPhone dans le même LAN
Paramètres qui permettent d'accéder à IPython Notebook depuis l'extérieur du local
Explication d'approche pour que les débutants soient dans le top 1,5% (0,83732) dans Kaggle Titanic_1
Changer le module à charger pour chaque environnement d'exécution en Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Explication d'approche pour que les débutants soient dans le top 1,5% (0,83732) dans Kaggle Titanic_2
Vérifiez le comportement du destroyer en Python
Comment vérifier la version de Django
Vérifiez si l'URL existe en Python
Dans Jupyter, ajoutez IPerl au noyau.
Comment vérifier la version d'opencv avec python
Divers commentaires à écrire dans le programme
Mettez Tkinter dans Macbook et vérifiez le fonctionnement
Comment mentionner un groupe d'utilisateurs avec une notification de mou, comment vérifier l'ID d'un groupe d'utilisateurs
Autoriser l'utilisation de HTML5 <input type = "date / time"> dans le formulaire DatetimeField dans Django
J'ai essayé de prédire les chevaux qui seront dans le top 3 avec LightGBM
Comment afficher dans toute la fenêtre lors de la définition de l'image d'arrière-plan avec tkinter
Si une exception survient dans la fonction, elle sera transmise à l'appelant 2