tkinter中命令和绑定有什么区别?

时间:2016-04-19 18:35:03

标签: python button methods tkinter

我试图让按钮在按下时打印一个字符串,并在它被释放时打印另一个字符串。我知道command属性和bind方法,但我想知道是否可以仅使用属性来实现它,或者我是否必须使用方法。有了这段代码:

class motor:
     def __init__(eleMesmo, eixo , valorZero):
         eleMesmo.eixo = eixo
         eleMesmo.zero = valorZero

     def aumenta(self):
         print(self.eixo + str(self.zero+5))
     def diminui(self):
         print(self.eixo + str(self.zero-5))
     def para(self):
    print(self.eixo + str(self.zero))

eixox = motor('x',90)
eixoy = motor('y',90)


class Interface:
    def __init__(elemesmo, widget):
         quadro = Frame(widget)
         quadro.pack()
         elemesmo.aumentarY = Button(quadro,text="Aumentar Y",height=10,width=20,command=eixoy.aumenta)
         elemesmo.aumentarY.pack(side=TOP)
         elemesmo.diminuirY = Button(quadro,text="Diminuir Y",height=10,width=20,command=eixoy.diminui)

按下按钮aumenta时,我可以为对象eixo y调用方法aumentarY。当按钮para被释放时,我想为对象eixo y调用方法aumentarY。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

所有Event types are outlined here,您正在寻找<Button-1>(点击按钮1(如果您是右手,则单击鼠标左键))和<ButtonRelease-1>(释放鼠标按钮1(左键)如果你是右撇子))

注意如果你绑定这两个,我就不会使用command

 elemesmo.aumentarY = Button(quadro,text="Aumentar Y",height=10,width=20)
 elemesmo.aumentarY.bind("<Button-1>",eixoy.aumenta)
 elemesmo.aumentarY.bind("<ButtonRelease-1>",eixoy.para)

但是你必须知道,当使用bind时,使用Event对象调用回调,如果你不需要它,你可以在回调中添加一个可选的和未使用的参数:

 def aumenta(self, event=None):
     print(self.eixo + str(self.zero+5))
 def diminui(self, event=None):
     print(self.eixo + str(self.zero-5))
 def para(self, event=None):
    print(self.eixo + str(self.zero))

答案 1 :(得分:0)

命令 .bind 方法都可以使用Python上的 tkinter 模块来增加按钮的外观和功能。

命令参数

tkinter.Button(frame, text="Exit", fg="green", bg="pink", command=master.destroy)

如果选择或单击“退出”按钮,则以上按钮将破坏框架。尝试使用 tab 键,然后按空格键。您会注意到该按钮将起作用。 如果您不想要那怎么办? 如果您严格希望用户使用鼠标左键单击该怎么办? 请注意,您可以将简单的零参数方法传递给 command 参数,该参数可以包含也可以不包含任何事件对象。

绑定方法

bind方法用于向按钮添加额外的信息/功能,单击方式,需要使用的特定按钮等等。看起来像这样:

btn = Button(frame, text="Exit", fg="green", bg="pink")
btn.bind(sequence="<Button-1>", func=master.destroy)

仅当按下鼠标键-1(左鼠标键)时,此功能才有效。某些替代版本如下:

btn.bind(sequence="<ButtonRelease-1>", func=master.destroy)

按下并释放鼠标键-1时,以上操作有效。

btn.bind(sequence="<Double-Button-1>", func=master.destroy)

类似地,仅当鼠标按钮1被双击时,以上序列才有效。

请注意,在bind方法中,不能将简单的零参数方法传递给 bind 方法,它必须包含一个事件对象,如下所示。

def callback(event):
          pass

有关绑定方法序列的完整列表,请参见this文章。