【问题标题】:How to pass parameters from Mouse-Event to a function?如何将参数从鼠标事件传递给函数?
【发布时间】:2016-12-26 21:18:58
【问题描述】:

我是 Python 新手,遇到以下问题:

这是我用来调用函数mouseclick的代码。但是 mouseclick 需要参数 counter (在我的例子中)。 我如何通过 计数器 功能 鼠标点击 点击标签? 这里的代码只是传递了参数event第二个参数要在哪里写?

label1.bind('<Button-1>', mouseclick)

我试过这个:

label1.bind('<Button-1>', mouseclick, counter)

还有这个:

label1.bind('<Button-1>', mouseclick(counter))

但是没有用。

感谢您的帮助!

【问题讨论】:

  • 这是哪个 gui?
  • mouseclick的功能是什么?
  • 这是 Tkinter
  • 你为什么要经过柜台?您不会传递变量,而只会传递变量 value。这就是你想要的吗?

标签: python tkinter parameter-passing mouseevent


【解决方案1】:

将变量与函数关联的常用方法是使用类实例。 python 类方法的好处是它们保留了对其实例的引用,因此以后可以调用它们而无需专门传递实例。

class Counter:

    def __init__(self):
        self.counter = 0

    def on_click(self, event):
        self.counter += 1

mouseclick = Counter()
label1.bind('<Button-1>', mouseclick.on_click)

【讨论】:

    【解决方案2】:

    如果您使用的是 Tkinter,您可以像这样将变量 counter 添加到 mouseclick 函数中:

    tk = Tkinter.Tk()
    
    class MyApp:
    
        def __init__(self,parent):
            self.counter = 0
            self.myparent = parent
    
            self.frame = Tkinter.Frame(tk,relief=RIDGE,borderwidth=2)
            self.frame.pack()
    
            label=Tkinter.Label(self.frame,text="Click me")
            label.bind('<Button-1>', self.mouseclick)
            label.pack()
    
        def mouseclick(self, event):
                self.counter+=1
                print(self.counter)
    
    
    myapp = MyApp(tk)
    tk.mainloop()
    

    【讨论】:

      【解决方案3】:

      使用lambda 很容易,您可以将mouseclick 的函数调用绑定到一个参数,定义一个“内联”匿名函数

      label1.bind('<Button-1>', lambda event : mouseclick(event,counter))
      

      【讨论】:

      • 谢谢。但它没有用。我认为这是正确的方法,但为什么它不起作用。我收到此错误:TypeError: &lt;lambda&gt;() takes no arguments (1 given)
      • 我现在必须做什么来修复它? @Jean-François
      猜你喜欢
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 2010-10-04
      • 1970-01-01
      • 2023-03-03
      • 2013-05-16
      • 1970-01-01
      相关资源
      最近更新 更多