Python-Variablenargument Ein Memorandum beim Erben einer definierten Klasse

Beim Schreiben eines Programms mit Pythons GUI (Tkinter), beim Erben der GUI-Klasse Auch variable Argumente werden ausnahmslos vererbt. Wenn Sie jedoch ein Argument in die geerbte Klasse einfügen, tritt in der geerbten Quelle ein Fehler auf, dessen Verwendung schwierig ist.

Beispielsweise kann die Schaltfläche Check von Tkinter nicht auf einen Anfangswert gesetzt werden. Ein Memorandum beim Erstellen einer Check-Schaltfläche, mit der Sie den Anfangswert festlegen können.

Wenn Sie es normal schreiben, wird es wie folgt sein.

NormalCheckbox


cv = tk.BooleanVar()
cb = tk.Checkbutton(self, parent, variable=cv)
cv.set(True)  #Anfangswerteinstellung

Aber ich möchte so schreiben.

ShimplCheckbox


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

Machen wir also SimpleCheck, indem wir tk.Checkbutton erben.

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

Es gibt jedoch ein Problem mit diesem Code. Das Problem ist, dass Sie eine Fehlermeldung erhalten, wenn Sie das Argument "check" nicht angeben.

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'

Daher wird die Methode zum Extrahieren von Argumenten in der Vererbung mithilfe variabler Argumente als Memorandum angezeigt. Check.png Bei Verwendung des ternären Operators scheint die Verwendung von "pass" einen Fehler zu ergeben.

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 gab mir einige Ratschläge Es scheint, dass der Anfangswert mit dem Pop-Second-Argument von Dic festgelegt werden kann, ohne den ternären Operator zu verwenden. Danke für deinen Rat.

diff


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


Recommended Posts

Python-Variablenargument Ein Memorandum beim Erben einer definierten Klasse
Ein Memorandum beim Schreiben von experimentellem Code ~ Anmelden in Python
Memorandum über Korrelation [Python]
Ein Memorandum über den Python-Mock
[GCP] Ein Memorandum zum Ausführen eines Python-Programms mit Cloud-Funktionen
Ein Memorandum bei der Verwendung von schöner Suppe
Vorsichtsmaßnahmen beim Erben der DatasetMixin-Klasse
[Python] Ein Memorandum der schönen Suppe4
Vorsichtsmaßnahmen beim Erstellen eines Python-Generators
[Python] Erbt eine Klasse mit Klassenvariablen
Beim Schreiben eines Programms in Python
Generieren Sie eine erstklassige Sammlung in Python
Erstellen Sie mit Class einen Python-Funktionsdekorator
Python-Memorandum
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
[Python] Wie man eine Klasse iterierbar macht
Python-Memorandum
Python Memorandum
Python Memorandum
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Python-Memorandum
Python Memorandum
Python-Memorandum
Memorandum zum Löschen von Python-Strings
Ein Memorandum über Probleme beim Formatieren von Daten
Fehler beim Installieren eines Moduls mit Python pip
[Python / Tkinter] Eine Klasse, die einen scrollbaren Frame erstellt
Ein Memorandum zum Aufrufen von Python aus Common Lisp
Ich habe eine Klasse in Python3 und Java geschrieben
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Memorandum der Extraktion durch Python BS4-Anfrage
Python: Bereiten Sie einen Serializer für die Klasseninstanz vor:
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
Ein Memo beim Erstellen einer Python-Umgebung mit Miniconda
Ein Memorandum zum Berühren von Python Flask mit Heroku
Python: Erstellen Sie eine Klasse, die entpackte Zuweisungen unterstützt
Ein Memorandum über die Python-Tesseract-Wrapper-Bibliothek
Traps beim Ausführen von ausführbaren Python Windows-Dateien
Die Geschichte, wenn ein Python-Benutzer eine JSON-Datei übergibt
[Python] -Klasse, Instanz
Python-Grundmemorandum
"Kanrika" die Python-Klasse
Python Pathlib Memorandum
Python-Memorandum (Algorithmus)
Über Python, Klasse
Ein Hinweis beim Überprüfen, ob der angegebene Schlüssel im definierten Wörterbuch mit Python vorhanden ist
Python-Memorandum [Links]
Python-Klasse, Instanz
# Python-Grundlagen (Klasse)
Ich möchte schnell UUID generieren (Gedenknotiz) ~ Python Edition ~
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
Probleme beim Erstellen eines CSV-JSON-Konvertierungstools mit Python
Beachten Sie beim Initialisieren einer Liste in Python
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Verwenden Sie communic (), wenn Sie eine Ausgabe in einem Python-Unterprozess empfangen
Ein Memorandum, wenn bei der Pip-Installation ein Fehler auftritt
conda Hinweis: Erstellen einer Python-Umgebung mit Spacon ITO