我有一个任务栏菜单,单击时连接到获取触发事件的插槽.现在问题是我想知道单击了哪个菜单项,但我不知道如何将该信息发送到连接的功能.这是用于将动作连接到函数:
QtCore.QObject.connect(menuAction, 'triggered()', menuClickedFunc)
Run Code Online (Sandbox Code Playgroud)
我知道有些事件返回一个值,但是trigger()没有.那么我该如何实现呢?我必须自己制作信号吗?
Eli*_*sky 44
用一个 lambda
这是PyQt书中的一个例子:
self.connect(button3, SIGNAL("clicked()"),
lambda who="Three": self.anyButton(who))
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你也可以使用functools.partial,但我觉得这个lambda方法更简单,更清晰.
Dom*_*rrs 11
如前所述,您可以使用lambda函数将额外的参数传递给您要执行的方法.
在此示例中,您可以将字符串obj传递给按下按钮时调用的函数AddControl().
# Create the build button with its caption
self.build_button = QPushButton('&Build Greeting', self)
# Connect the button's clicked signal to AddControl
self.build_button.clicked.connect(lambda: self.AddControl('fooData'))
def AddControl(self, name):
print name
Run Code Online (Sandbox Code Playgroud)
来源:snip2code - 使用Lambda函数在PyQt4中传递额外参数
小智 5
我还想补充一点,sender如果您只需要找出哪个小部件发送了信号,您可以使用该方法。例如:
def menuClickedFunc(self):
# The sender object:
sender = self.sender()
# The sender object's name:
senderName = sender.objectName()
print senderName
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27100 次 |
| 最近记录: |