【问题标题】:convert PyQt4 string styled signal to PyQt5 Signal将 PyQt4 字符串样式的信号转换为 PyQt5 信号
【发布时间】:2016-05-13 16:04:10
【问题描述】:

我通常会编写一个小函数来创建 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

【问题讨论】:

标签: pyqt pyqt4 pyqt5


【解决方案1】:

我想你可能想多了。新式信号是实例属性,所以你可以使用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

【讨论】:

    【解决方案2】:

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

    PyQt5下连接信号的方式有3种。 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多