我试图让按钮在按下时打印一个字符串,并在它被释放时打印另一个字符串。我知道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
。我怎么能这样做?
答案 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文章。