我有点击时连接到获取触发事件时隙中的任务栏菜单。现在的问题是,我想知道单击的菜单项,但我不知道如何发送信息给连接到的功能。这里是用来连接动作到功能:

QtCore.QObject.connect(menuAction, 'triggered()', menuClickedFunc)

我知道一些事件返回一个值,但触发()不会。那么,如何做到这一点?我必须使自己的信号?

有帮助吗?

解决方案

使用一个lambda

下面是来自 PyQt的书的示例:

self.connect(button3, SIGNAL("clicked()"),
    lambda who="Three": self.anyButton(who))

顺便说一句,你也可以使用functools.partial,但我觉得lambda方法更加简单和清晰。

其他提示

前面已经提到这里 你可以使用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

来源: snip2code - 使用lambda函数传递额外的参数PyQt4中

使用functools.partial

,否则你会发现你不能传递参数时动态脚本运行时,如果你使用的λ。

在一般情况下,你应该有连接到不同的时隙中的每个菜单项,并有只为它自己的菜单项,每个插槽处理功能。举例来说,如果你有一个像“拯救”,“关闭”,“打开”菜单项,你应该为每个独立的插槽,而不是试图有一个case语句单槽它。

如果你不想这样做的,你可以使用的 QObject的::发送者()函数来获得的指针发送者(即:所发射的信号中的对象)。我想听到更多一些关于你想要什么来完成,虽然。

我还想补充一点,你可以使用sender方法,如果你只需要找出小部件发出的信号。例如:

def menuClickedFunc(self):
    # The sender object:
    sender = self.sender()
    # The sender object's name:
    senderName = sender.objectName()
    print senderName
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top