Python 如何在pyqt中为QAction重新实现triggered()信号?

Python 如何在pyqt中为QAction重新实现triggered()信号?,python,plugins,pyqt,signals-slots,qaction,Python,Plugins,Pyqt,Signals Slots,Qaction,我将Python与PyQt一起用于我的接口,而Yapsi用于添加插件。Yapsy找到了我所有的插件,并将它们全部添加到我主窗口的菜单中。每个插件都通过触发信号激活。QAction的这个信号没有参数,我需要知道哪个插件发出这个信号 以下是相关代码: pluginMenu = self.menuBar().addMenu("P&lugins") # Create plugin manager self.manager = PluginManager(categories_filter={

我将Python与PyQt一起用于我的接口,而Yapsi用于添加插件。Yapsy找到了我所有的插件,并将它们全部添加到我主窗口的菜单中。每个插件都通过触发信号激活。QAction的这个信号没有参数,我需要知道哪个插件发出这个信号

以下是相关代码:

pluginMenu = self.menuBar().addMenu("P&lugins")

# Create plugin manager
self.manager = PluginManager(categories_filter={ "Formatters": Formatter})
self.manager.setPluginPlaces(["plugins"])

# Load plugins
self.manager.locatePlugins()
self.manager.loadPlugins()

# A do-nothing formatter by default
self.formatters = {}

for plugin in self.manager.getPluginsOfCategory("Formatters"):

# plugin.plugin_object is an instance of the plugin
print(plugin.plugin_object.name)
# The method to create action associated each input to default triggered() signal
newAction = self.createAction(plugin.plugin_object.name, slot=self.updatePreview())


self.addActions(pluginMenu, (newAction, None))
self.formatters[plugin.plugin_object.name] = (plugin.plugin_object, newAction)

def updatePreview(self):
    # Here I need know what plugin emit the signal    
    #===================================================================

我想用一些参数将信号与其他信号连接起来,但我不知道怎么做。

我不知道Yapsi是什么,但有一种方法:

QObject QObject.sender(self)

如果在中调用,则返回指向发送信号的对象的指针 由信号激活的插槽;否则返回0。指针是 仅在调用此函数的插槽执行期间有效 从该对象的线程上下文

如果发送方为,则此函数返回的指针将无效 损坏,或者插槽与发送方信号断开

警告:此函数违反了的面向对象原则 模块化。但是,在以下情况下,访问发件人可能会很有用: 许多信号连接到单个插槽

警告:如上所述,此函数的返回值不正确 从线程通过Qt.DirectConnection调用插槽时有效 与此对象的线程不同。不要在这种情况下使用此功能 情景类型


这里还有一些提示:

正确的方法是使用

示例代码:

signalmap = QSignalMapper(self)
signalmap.mapped[QString].connect(self.handler)
...
signalmap.setMapping(action, name)
action.triggered[()].connect(signalmap.map)

这将使用字符串“name”参数重新发出
触发的
信号。还可以使用
int
QWidget
QObject
参数重新发出信号。

Yapsy是一个用于添加新插件的简单库。这有助于使您的软件更加模块化。