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