2016-07-27 71 views
0

我已經在python中創建了一個擴展tkinter畫布的類。我正在嘗試將一個事件附加到此畫布上以處理類內的點擊。它的功能,如果我附上事件的類本身之外,但在類中結合時,單擊事件才發生的一次,然後繼續不要做任何事情只有執行第一次點擊:附加事件到自我(畫布)tkinter

class myCanvas(Canvas): 
    def callback(event): 
     print('clicked at', event.x, event.y) 

    def __init__(self, parent, **kwargs): 
     Canvas.__init__(self, parent, **kwargs) 
     self.bind("<Button-1>", self.callback()) 
     self.height = self.winfo_reqheight() 
     self.width = self.winfo_reqwidth() 

綁定事件函數只有當我在課堂之外附加活動時才正確。任何幫助找到一種方法將事件附加到擴展畫布將不勝感激。

+1

無法重現,完美無缺。 (「Perfectly fine」意思是每次點擊時都會顯示一個錯誤,因爲它缺少'self'參數。)不確定它是否重要,但是您使用的是什麼Python版本? –

+0

真的嗎?我使用Python 3.5和Pycharm,它爲我運行,但我只是不工作,因爲我期望 – D3181

+0

你的意思是類頭類mycanvas()缺少自我參數? – D3181

回答

1

的問題是在這條線:

self.bind("<Button-1>", self.callback()) 

您需要連接東西可調用(換句話說,一個函數)的事件。該功能被稱爲self.callback。如果您調用函數(self.callback()),那麼您將返回值self.callback()連接到click事件而不是函數本身。