Python tkinter按钮绑定

时间:2012-08-27 14:30:54

标签: python button tkinter bind

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时重复调用一个函数。这应该通过轮询来实现。单击该按钮时,应调用poll函数。轮询应该连续运行,直到mousebutton-1被释放。但问题是按下按钮时没有任何反应。

编辑指出的错误。但是代码仍然存在一些问题,因为窗口本身不再显示,并且由于行“self.ZOOMIN.after(300,self.poll())”,代码进入无限循环。 (这只是我代码的一部分)

1 个答案:

答案 0 :(得分:2)

在python中,您需要通过使用括号实际调用方法/函数来传递一系列参数。如果函数/方法不接受任何参数,则仍需要空括号。换句话说,你想要:

self.poll()

self.OnZOOMINClick()
self.grid()

而不是self.pollself.OnZOOMINClickself.grid等。这是因为在python中,函数和方法是对象。它们可以传递给函数或绑定到局部变量,就像其他任何东西一样。

这里可能还有其他错误,但是那些突然出现(如果您显示所有代码,那么.grid方法中的行和列似乎有点奇怪。)另外一个错误out OnZOOMINClick的定义应该是def OnZOOMINClick( self )


另请注意,self.pollvar = int()self.pollvar = 0执行完全相同的操作,您只需要两个语句中的一个(我更喜欢后者)。