2017-05-03 105 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()` 

這就是錯誤:類型錯誤:超()參數1必須是類型,而不是classobj

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

我在做什麼錯?代碼在python 3.XX中工作正常,但在python 2.XX中沒有。

回答

1

Frame是不是一個新的風格類,但是super需要新的樣式類的工作。在python-3.x中,一切都是新式類,super將正常工作。

需要硬編碼的超類和方法在Python 2:

Frame.__init__(self, master) 

就像他們在official documentation做。

0

TKinter.Frame是Python 2上的舊式類。像super之類的功能將無法使用它。請參閱Frame.__init__直接:

Frame.__init__(self, master) 
相關問題