Argument de variable Python Un mémorandum lors de l'héritage d'une classe définie

Lors de l'écriture d'un programme à l'aide de l'interface graphique de Python (Tkinter), lors de l'héritage de la classe GUI Les arguments variables sont également hérités sans exception. Cependant, si vous ajoutez un argument dans la classe héritée, une erreur se produira dans la source héritée et il sera difficile à utiliser.

Par exemple, le bouton Vérifier de Tkinter ne peut pas être défini sur une valeur initiale. Un mémorandum lors de la création d'un bouton Vérifier qui vous permet de définir la valeur initiale.

Si vous l'écrivez normalement, ce sera comme suit.

NormalCheckbox


cv = tk.BooleanVar()
cb = tk.Checkbutton(self, parent, variable=cv)
cv.set(True)  #Réglage de la valeur initiale

Mais je veux écrire comme ça.

ShimplCheckbox


cb = tk.Checkbutton(self, parent, check=True)

Alors, faisons SimpleCheck en héritant de tk.Checkbutton.

SimpleCheckbox.py


# Initial value = check=True or False
class SimpleCheck(tk.Checkbutton):
    def __init__(self, parent, *args, **kw):
        self.flag = kw.pop('check')
        self.var =  tk.BooleanVar()
        if self.flag:
            self.var.set(True)
        self.txt = kw["text"]
        tk.Checkbutton.__init__(self, parent, *args, **kw, variable=self.var)

    def get(self):
        return self.var.get()

Cependant, il y a un problème avec ce code. Le problème est que si vous ne spécifiez pas l'argument "check", vous obtiendrez une erreur.

mainloop


if __name__ == '__main__':
    app  = tk.Tk()
    sc1 = SimpleCheck(app, check=True, text="hoge")
    sc1.pack()
    sc2 = SimpleCheck(app)
    sc2.pack()

    print(sc1.getText())    
    print(sc1.cget('text'))#same result
    app.mainloop()

error


Traceback (most recent call last):
  File "arg_test.py", line 24, in <module>
    sc2 = SimpleCheck(app)
  File "arg_test.py", line 7, in __init__
    self.flag = kw.pop('check')
KeyError: 'check'

Par conséquent, la méthode d'extraction des arguments dans l'héritage à l'aide d'arguments variables est présentée sous forme de mémorandum. Check.png Lors de l'utilisation de l'opérateur ternaire, l'utilisation de "pass" semble donner une erreur.

SimpleCheck.py


import tkinter as tk

# Check value  :check=True or False (Default False)
# Label text   :text=Keword
class SimpleCheck(tk.Checkbutton):
    def __init__(self, parent, *args, **kw):
        self.flag = kw.pop('check') if('check' in kw) else False
        self.txt  = kw['text']      if('text' in kw) else ""
        self.var =  tk.BooleanVar()
        if self.flag:
            self.var.set(True)
        tk.Checkbutton.__init__(self, parent, *args, **kw, variable=self.var)

    def get(self):
        return self.var.get()

    def getText(self):
        return self.txt

if __name__ == '__main__':
    app  = tk.Tk()
    sc1 = SimpleCheck(app, check=True, text="hoge")
    sc1.pack()
    sc2 = SimpleCheck(app)
    sc2.pack()

    print(sc1.getText())    
    print(sc1.cget('text'))#same result
    app.mainloop()

Postscript @shiracamus m'a donné quelques conseils Il semble que la valeur initiale puisse être définie avec le second argument pop de Dic sans utiliser l'opérateur ternaire. Merci pour votre conseil.

diff


    def __init__(self, parent, *args, **kw):
        self.flag = kw.pop('check', False)
        self.txt  = kw['text']  if('text' in kw) else ""
    


Recommended Posts

Argument de variable Python Un mémorandum lors de l'héritage d'une classe définie
Un mémorandum lors de l'écriture de code expérimental ~ Se connecter en python
Mémorandum sur la corrélation [Python]
Un mémorandum sur le simulacre de Python
[GCP] Un mémorandum lors de l'exécution d'un programme Python avec Cloud Functions
Un mémorandum lors de l'utilisation d'une belle soupe
Précautions lors de l'héritage de la classe DatasetMixin
[Python] Un mémorandum de belle soupe4
Précautions lors de la création d'un générateur Python
[Python] Hériter d'une classe avec des variables de classe
Lors de l'écriture d'un programme en Python
Générer une collection de première classe en Python
Créer un décorateur de fonction Python avec Class
Mémorandum Python
Précautions lors du décapage d'une fonction en python
[Python] Comment rendre une classe itérable
Mémorandum Python
mémorandum python
mémorandum python
Générer une classe à partir d'une chaîne en Python
Mémorandum Python
mémorandum python
Mémorandum Python
Mémorandum du processus de suppression de chaîne python
Un mémorandum de problème lors du formatage des données
Erreur lors de l'installation d'un module avec Python pip
[Python / Tkinter] Une classe qui crée un cadre défilable
Un mémorandum sur l'appel de Python à partir de Common Lisp
J'ai écrit une classe en Python3 et Java
[Note] Créez une classe de fuseau horaire sur une ligne avec python
Mémorandum d'extraction par requête python bs4
Python: préparez un sérialiseur pour l'instance de classe:
Remarque Python: lors de l'attribution d'une valeur à une chaîne
Un mémo lors de la création d'un environnement python avec miniconda
Un mémorandum pour toucher Python Flask avec Heroku
Python: créer une classe qui prend en charge l'affectation décompressée
Un mémorandum sur la bibliothèque de wrapper Python tesseract
Pièges piégés lors de l'exécution d'exécutables Windows Python
L'histoire lorsqu'un utilisateur Python passe un fichier JSON
[Python] classe, instance
Mémorandum de base Python
"Kanrika" la classe python
Mémorandum de Python Pathlib
Mémorandum Python (algorithme)
À propos de python, classe
Une note lors de la vérification si la clé spécifiée existe dans le dictionnaire défini avec python
Mémorandum Python [liens]
classe python, instance
Les bases de #Python (classe)
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Implémentation python de la classe de régression linéaire bayésienne
Un mémorandum pour exécuter un script python dans un fichier bat
Problèmes lors de la création d'un outil de conversion csv-json avec python
Choses à noter lors de l'initialisation d'une liste en Python
Que contient cette variable (lorsque le script Python est en cours d'exécution)
Utilisez communiquer () lors de la réception de la sortie dans un sous-processus Python
Un mémorandum lorsqu'une erreur se produit avec pip install
Remarque conda: Création d'un environnement Python avec Spacon ITO