PyQt4 的信号与槽机制改写为兼容 PyQT5 的形式

it2024-04-07  48

PyQt4 的信号与槽机制改写为兼容 PyQT5 的形式

记录博文

一、前言

PyQt4 到 PyQt5 还是改了很多东西的,特别是信号与槽的机制。 比如:

# PyQt4 self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()")) # PyQt5 buttonBox.accepted.connect(self.accept)

这样直接该代码是没问题,但是有的情况下,一些 PyQt4 代码封装为某种简便的函数,改起来就有点突然不知道怎么办。 本文就是记录这么一个情况,并提供一个解决办法。

二、具体情况

比如下面的代码:

# PyQt4 def createAction(self, text, slot=None, shortcut=None, icon=None, tip=None, checkable=False, signal="triggered()"): action = QAction(text, self) if icon is not None: action.setIcon(QIcon(":/{}.png".format(icon))) if shortcut is not None: action.setShortcut(shortcut) if tip is not None: action.setToolTip(tip) action.setStatusTip(tip) if slot is not None: self.connect(action, SIGNAL(signal), slot) if checkable: action.setCheckable(True) return action

这里的信号,属于一个字符串,一时突然不知道怎么改,(⊙o⊙)…。

三、灵感突发

看下面这段简单的代码:

class A(object): def a(self): print('GodLordGee') def b(self): c= 'a' func = getattr(self, c, None) func() test = A() test.b()

运行结果:

GodLordGee >>>

这样,原来可以啊。ok,这个问题可以解决了。

四、PyQt5 兼容 PyQt4 的代码

#PyQt5 def createAction(self, text, slot=None, shortcut=None, icon=None, tip=None, checkable=False, signal="triggered()"): action = QAction(text, self) if icon is not None: action.setIcon(QIcon(":/{}.png".format(icon))) if shortcut is not None: action.setShortcut(shortcut) if tip is not None: action.setToolTip(tip) action.setStatusTip(tip) if slot is not None: getattr(action, signal.split('(')[0]).connect(slot) if checkable: action.setCheckable(True) return action

五、总结

一直用 Python 的.取用类的属性,忘记了getattr的方式,没想到可以在这里用到。

点我回顶部 ☚

              Fin.

最新回复(0)