将 PyQt4 字符串样式的信号转换为 PyQt5 信号



我通常写一个小函数来创建QActions。但是 PyQt5 不再支持函数 SIGNAL()。我不知道如何漂亮地重写这个函数。

def createAction(self, text, slot=None, signal='triggered()'):
    action = QAction(text, self)
    if slot is not None:
        self.connect(action, SIGNAL(signal), slot)
    return action

我想你可能想多了。新样式信号是实例属性,因此您只需使用 getattr:

def createAction(self, text, slot=None, signal='triggered'):
    action = QAction(text, self)
    if slot is not None:
        getattr(action, signal).connect(slot)
    return action

这里的问题是关于使用字符串(按名称)来引用信号。

PyQt5 下有三种连接信号的方法。查看 kwargs 的连接信号 所以我提出了这个解决方案。

def createAction(self, text, slot=None, signal='triggered'):
    action = QAction(text, self)
    signal_dict = {'triggered':action.triggered, 'changed':action.changed,
                    'toggled':action.toggled, 'hovered':action.hovered }
    if slot is not None:
        # self.connect(action, SIGNAL(signal), slot)
        signal_dict[signal].connect(slot)
    return action

最新更新