mouseReleaseEvent在应用程序启动时触发,而不是在PyQt5中单击

2024-10-01 02:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用PyQt5编写的python3.5应用程序中,我有类似mouseReleaseEvents

self.scene1.mouseReleaseEvent = self.setScene("1")

当它们有变量要传递时,它们都会在应用程序启动时触发,而在实际单击时不会触发。在

但是,如果我删除变量,它们会在按下时工作,并且不会在应用程序启动时触发:

^{pr2}$

但我得给这个函数加一个变量

def setScene(self, scene):
    print(scene)

关于变量为什么会导致这种行为以及如何修复它,有什么建议吗?在


Tags: 函数self应用程序defscene建议pyqt5print
1条回答
网友
1楼 · 发布于 2024-10-01 02:28:05

可能在每个GUI中,当您将函数绑定到事件时,您必须使用函数名—这意味着没有()和参数。在

你可以有两种方法

  • “无聊”:创建没有参数的函数并分配给事件

    def new_fun(self):
        self.setScene("1")
    
    self.scene1.mouseReleaseEvent = self.new_fun
    
  • “popular”:使用lambda创建匿名函数

    self.scene1.mouseReleaseEvent = lambda:self.setScene("1")
    

我不知道,但是mouseReleaseEvent可能与event对象一起运行函数,该对象包含有关事件的信息,因此您必须获取它

self.scene1.mouseReleaseEvent = lambda event:self.setScene("1")

如果您必须在for x循环中使用lambda,并在lambda函数中使用x,那么您需要

for x in some_list:
   self.scene1.mouseReleaseEvent = lambda event, arg=x :self.setScene(arg)

因为lambda"lazy",当你定义lambda时,它不会将x中的值复制到函数中,但是当你释放鼠标时,它从x获取值,但此时x的最后一个值来自{}。在

相关问题 更多 >