2017-05-03 1 views
0
from Tkinter import * 

class Application(Frame): 
    def __init__(self, master): 
     super(Application, self).__init__(master) 
     self.grid() 
     self.bttnClicks = 0 
     self.createWidgets() 

    def createWidgets(self): 
     self.bttn = Button(self) 
     self.bttn["text"] = "number of clicks" 
     self.bttn["command"] = self.upadteClicks 
     self.bttn.grid() 


    def upadteClicks(self): 
     self.bttnClicks += 1 
     self.bttn["text"] = "number of clicks " + str(self.bttnClicks) 

root = Tk() 
root.title("button that do something") 
root.geometry("400x200") 
app = Application(root) 
root.mainloop()` 

C'est l'erreur:TypeError: super() Argument 1 doit être de type, non classObj

super(Application, self).__init__(master) 
TypeError: super() argument 1 must be type, not classobj 

Qu'est-ce que je fais mal? Le code a bien fonctionné dans python 3.XX mais dans python 2.XX il ne fonctionne pas.

Répondre

1

Frame n'est pas une nouvelle classe de style, mais super nécessite des classes nouveau style au travail. Dans python-3.x où tout est une classe de style nouveau, le super fonctionnera correctement.

Vous devrez câbler la superclasse et la méthode en python 2:

Frame.__init__(self, master) 

comme ils le font dans le official documentation.

0

TKinter.Frame est une ancienne classe sur Python 2. Des fonctionnalités comme super ne fonctionnera pas avec elle. Reportez-vous à Frame.__init__ directement:

Frame.__init__(self, master)