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

을 classobj하지, 유형이어야합니다? 이 코드는 파이썬 3.XX에서 잘 작동했지만 파이썬 2.XX에서는 잘 동작하지 않습니다.형식 오류 :</p> <pre><code>super(Application, self).__init__(master) TypeError: super() argument 1 must be type, not classobj </code></pre> <p>내가 잘못 뭐하는 거지 : 슈퍼() 인수 1은 오류가 있다고

답변

1

Frame 새로운 스타일의 클래스가 아니라 super 작동하는 새로운 스타일의 클래스를 필요로한다. 모든 것이 새로운 스타일의 클래스 인 python-3.x에서는 super이 제대로 작동합니다.

당신은 파이썬 2의 슈퍼 클래스 및 방법을 하드 코딩해야합니다

Frame.__init__(self, master) 

들이 official documentation에서 할 수있다.

0

TKinter.Frame은 Python 2의 구식 클래스입니다. super과 같은 기능은 작동하지 않습니다. 직접 Frame.__init__를 참조하십시오

Frame.__init__(self, master)