2012-08-27 92 views
1
class simpleapp_tk(tkinter.Tk): 
    def __init__(self,parent): 
     tkinter.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 



    def initialize(self): 
     self.grid() 
     self.ZOOMIN = tkinter.Button(self,text="ZOOM IN") 
     self.ZOOMIN.grid(column=1,row=6) 
     self.ZOOMIN.bind("<Button-1>",self.bzoomin()) 
     self.ZOOMIN.bind("<ButtonRelease-1>", self.brzoomin()) 

     self.pollvar=0 


    def poll(self): 
     if self.pollvar==1: 
      self.ZOOMIN.after(300,self.poll()) 
      self.OnZOOMINClick() 


    def brzoomin(self,event): 
     self.pollvar=0 
    def bzoomin(self,event): 
     self.pollvar=1 
     self.poll 


    def OnZOOMINClick(self): 
    ....code 


if __name__ == "__main__": 
    app = simpleapp_tk(None) 
    app.title('CAMERA CONTROLL v1') 

    app.mainloop() 

我想做一個功能,而mousebutton-1被按下zoominbutton反覆調用。這應該是通過輪詢來實現的。點擊按鈕時,應調用輪詢功能。投票應持續運行,直到mousebutton-1被釋放。但問題是,按下按鈕時沒有任何反應。蟒蛇tkinter按鈕綁定

編輯指出的錯誤。但是由於窗口本身不再顯示,並且代碼由於「self.ZOOMIN.after(300,self.poll())」這一行而進入無限循環,所以代碼中仍然存在一些問題。 (這只是我的代碼的一部分)

+0

如果您計劃編寫(並共享)很多python代碼,您可能需要考慮閱讀[PEP 8](http://www.python.org/dev/peps/pep-0008/)。它建議爲方法使用'names_with_underscores'併爲類預留'CamelCase'(等等)。 – mgilson

回答

2

在python中,您需要通過使用括號來實際調用方法/函數來傳遞一系列參數。如果函數/方法不接受任何參數,則仍然需要空圓括號。換句話說,你想:

self.poll() 

self.OnZOOMINClick() 
self.grid() 

,而不是self.pollself.OnZOOMINClick,並self.grid等,這是因爲在Python中,函數和方法對象。它們可以傳遞給函數或像其他任何東西一樣綁定到局部變量。

這裏可能還有其他的錯誤,但是這些錯誤馬上就會顯現出來(如果你顯示所有的代碼,你的.grid方法中的行和列看起來有點奇怪)。另外一個突出的錯誤是OnZOOMINClick的定義可能應該是def OnZOOMINClick(self)


還要注意的是self.pollvar = int()self.pollvar = 0做同樣的事情,你只需要兩個語句之一(我寧願是後者)。

+0

這絕對不是所有的代碼。 –