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

时间:2016-02-04 06:49:47

标签: pyqt 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

2 个答案:

答案 0 :(得分:2)

我认为你可能会过度思考这个问题。新式信号是实例属性,因此您只需使用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

答案 1 :(得分:1)

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

在PyQt5下连接信号有三种方法。 参见 connecting signals by 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