在使用PyQt5编写的Python 3.5应用程序中,我有像这样的mouseReleaseEvents
self.scene1.mouseReleaseEvent = self.setScene("1")
当他们有要传递的变量时,它们都会在应用程序启动时触发,并且在实际点击时不会触发。
但是,如果删除变量,它们在按下时会起作用,并且在应用程序启动时不会触发:
self.scene1.mouseReleaseEvent = self.setScene
但我必须得到一个变量到这个函数
def setScene(self, scene):
print(scene)
有关变量导致此行为的原因以及如何解决此问题的任何建议?
答案 0 :(得分:1)
当您将函数绑定到事件时,可能在每个GUI中都必须使用函数名称 - 这意味着没有()
和参数。
你可以有两种方法
"无聊":创建没有参数的函数并分配给事件
def new_fun(self):
self.setScene("1")
self.scene1.mouseReleaseEvent = self.new_fun
"热门":使用lambda
创建匿名函数
self.scene1.mouseReleaseEvent = lambda:self.setScene("1")
我不知道,但mouseReleaseEvent
可以使用event
对象运行,该对象包含有关事件的信息,因此您必须抓住它
self.scene1.mouseReleaseEvent = lambda event:self.setScene("1")
如果您必须在lambda
循环中使用for x
并在x
函数中使用lambda
,那么您需要
for x in some_list:
self.scene1.mouseReleaseEvent = lambda event, arg=x :self.setScene(arg)
因为lambda
是"lazy"
,并且在定义x
时它不会将值从lambda
复制到函数,但它从x
获取值当你释放鼠标时 - 但是那个momen x
的最后一个值来自some_list
。