2016-04-19 28 views
1

我試圖讓一個按鈕在按下時打印一個字符串,並在發佈時打印另一個按鈕。我知道command屬性和bind方法,但我想知道是否有可能只使用屬性來完成它,或者如果我必須使用方法。與此片的代碼:tkinter中的命令和綁定有什麼區別?

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) 

按下按鈕aumentarY當我可以調用用於對象eixo y方法aumenta。當按鈕aumentarY被釋放時,我想調用方法para作爲對象eixo y。我如何做到這一點?

+0

命令僅用於「點擊按鈕」並且不接收任何參數。任何小部件都可以綁定一堆不同類型的事件,並且總是會傳遞一個'Event'對象作爲唯一的參數。 –

回答

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)) 
相關問題