代码之家  ›  专栏  ›  技术社区  ›  gabriel119435

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

  •  3
  • gabriel119435  · 技术社区  · 10 年前

    我试着让按钮在按下时打印一个字符串,释放时打印另一个字符串。我知道 command atribute和 bind 方法,但我想知道是否可以只使用atributes来完成它,或者是否必须使用方法。使用这段代码:

    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 for对象 eixo y when按钮 aumentarY 按下。我想调用该方法 para for对象 埃克索伊 when按钮 辅助设备 释放。我怎么做?

    2 回复  |  直到 10 年前
        1
  •  5
  •   geertjanvdk    5 年前

    全部的 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))
    
        2
  •  1
  •   Amitrajit Bose    8 年前

    二者都 命令 绑定 方法用于使用 tkinter公司 Python上的模块。

    命令参数 :

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

    上面的按钮会破坏我们选择或点击“退出”按钮时的画面。尝试使用 标签 按键 空格键 。你会注意到按钮可以工作。 如果你不想要呢? 如果您严格要求用户使用鼠标左键单击它,该怎么办? 请注意,您可以将一个简单的零参数方法传递给 命令 参数,该参数可以包含或不包含任何事件对象。

    绑定方法 :

    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方法中,不能将简单的零参数方法传递给 绑定 方法,它必须包含一个事件对象,如下所示。

    def callback(event):
              pass
    

    有关bind方法的整个序列列表,请参阅 this 文章