2017-10-07 2 views
0

Ich möchte Button in OPButtun ableiten. OPButton ist eine normale Schaltfläche mit der Fähigkeit, Hilfemeldungen zu schreiben, wenn die Maus schwebt. OPButton muss alle möglichen Parameterlisten akzeptieren, dass dre regulärer Knopf Konstruktor akzeptieren würde, plus zwei meine eigenen: eine Nachricht und die StringVar, wo es in schreibenTkinter: Unterklasse Button mit zusätzlichen Argumenten

Dies ist mein Code (angeblich runnable)

from tkinter import * 
from tkinter import ttk 

class OPButton(Button): 
    """ """ 
    def ___init___(self, parent, string, message, *args, **kwargs): 
     ttk.Button.__init__(self, parent, *args, **kwargs) 
     self.bind("<Enter>", command=lambda e: string.set(message)) 
     self.bind("<Leave>", command=lambda e: string.set("")) 

if __name__ == '__main__': 
    root = Tk() 
    root.str= StringVar() 
    OPButton(root, root.str, "hovering the button", text="click here").pack() 
    ttk.Label(root, textvariable=root.str).pack() 
    root.mainloop() 
.

und die Fehlermeldung:

Traceback (most recent call last): 
    File "C:\Users\planchoo\oPButton.py", line 19, in <module> 
    OPButton(root, "Hello World", "Bouton", text="Hello").pack() 
TypeError: __init__() takes from 1 to 3 positional arguments but 4 were given 

Edit: Im Folgenden finden Sie die korrigierte Code nach Reaktion des Bryan. Funktioniert in Perfektion (Danke).

from tkinter import * 
from tkinter import ttk 

class OPButton(Button): 
    """ """ 
    def __init__(self, parent, string, message, *args, **kwargs): 
     ttk.Button.__init__(self, parent, *args, **kwargs) 
     self.bind("<Enter>", lambda e: string.set(message)) 
     self.bind("<Leave>", lambda e: string.set("")) 

if __name__ == '__main__': 
    root = Tk() 
    root.chaine = StringVar() 
    OPButton(root, root.chaine, "Bouton", text="Hello").pack() 
    ttk.Label(root, textvariable=root.chaine).pack() 
    root.mainloop() 

Antwort

1

Ich bin mir ziemlich sicher, dass die __init__() Funktion Sie wurde definiert als ___init___() geschrieben.

+0

Danke. Ich schaute nicht in die richtige Richtung. Ich habe den Debugging-Code am Ende des ursprünglichen Posts gepostet. Danke noch einmal. Obwohl der Fehler ein trivialer Tippfehler war, blieb ich stundenlang stecken. – quickbug

+0

@quickbug Kein Problem. :) –

Verwandte Themen