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