到 PyQt5 'connect' 转换
To PyQt5 'connect' conversion
我尝试将一些代码从 PyQt4 转换为 PyQt5,但是我从未使用过 PyQt,这就是为什么我对此有一些问题。我未能使用 .connect 转换某些代码,因为据我所知,在 PyQt5 中,信号和槽的工作方式已更改。这是代码。
class Gui(QWidget.QMainWindow, Ui_MainWindow):
def __init__(self, cfgpath):
QWidget.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.configpath = cfgpath
self.paint = Viewer(self)
self.setupUi(self)
self.loadButton.clicked.connect(self.loadImage)
self.maskClearButton.clicked.connect(self.paint.clearMask)
self.brushSizeSB.valueChanged.connect(self.brushSizeChange)
btnlist = [self.horDownBtn, self.horDownLargeBtn, self.horUpBtn, self.horUpLargeBtn,
self.vertDownBtn, self.vertDownLargeBtn, self.vertUpBtn, self.vertUpLargeBtn]
sigmap = QtCore.QSignalMapper(self)
for i in range(len(btnlist)):
# Here it falls
self.connect(btnlist[i], QtCore.SIGNAL("clicked()"), sigmap, QtCore.SLOT("map()"))
btnlist[i].clicked
sigmap.setMapping(btnlist[i], i)
# And here
self.connect(sigmap, QtCore.SIGNAL("mapped(int)"), self.paint.handleScaleBtn)
那么我该如何更改此代码才能使其正常工作?
新的连接方式如下:
sender.signal.connect(slot)
在你的情况下改变:
self.connect(btnlist[i], QtCore.SIGNAL("clicked()"), sigmap, QtCore.SLOT("map()"))
self.connect(sigmap, QtCore.SIGNAL("mapped(int)"), self.paint.handleScaleBtn)
至
btnlist[i].clicked.connect(sigmap.map)
sigmap.mapped.connect(self.paint.handleScaleBtn)
这里有新信号槽样式所需的所有信息:pyqt new-style signal/slots
尝试,如果您有任何特殊问题,请告诉我。
我尝试将一些代码从 PyQt4 转换为 PyQt5,但是我从未使用过 PyQt,这就是为什么我对此有一些问题。我未能使用 .connect 转换某些代码,因为据我所知,在 PyQt5 中,信号和槽的工作方式已更改。这是代码。
class Gui(QWidget.QMainWindow, Ui_MainWindow):
def __init__(self, cfgpath):
QWidget.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.configpath = cfgpath
self.paint = Viewer(self)
self.setupUi(self)
self.loadButton.clicked.connect(self.loadImage)
self.maskClearButton.clicked.connect(self.paint.clearMask)
self.brushSizeSB.valueChanged.connect(self.brushSizeChange)
btnlist = [self.horDownBtn, self.horDownLargeBtn, self.horUpBtn, self.horUpLargeBtn,
self.vertDownBtn, self.vertDownLargeBtn, self.vertUpBtn, self.vertUpLargeBtn]
sigmap = QtCore.QSignalMapper(self)
for i in range(len(btnlist)):
# Here it falls
self.connect(btnlist[i], QtCore.SIGNAL("clicked()"), sigmap, QtCore.SLOT("map()"))
btnlist[i].clicked
sigmap.setMapping(btnlist[i], i)
# And here
self.connect(sigmap, QtCore.SIGNAL("mapped(int)"), self.paint.handleScaleBtn)
那么我该如何更改此代码才能使其正常工作?
新的连接方式如下:
sender.signal.connect(slot)
在你的情况下改变:
self.connect(btnlist[i], QtCore.SIGNAL("clicked()"), sigmap, QtCore.SLOT("map()"))
self.connect(sigmap, QtCore.SIGNAL("mapped(int)"), self.paint.handleScaleBtn)
至
btnlist[i].clicked.connect(sigmap.map)
sigmap.mapped.connect(self.paint.handleScaleBtn)
这里有新信号槽样式所需的所有信息:pyqt new-style signal/slots 尝试,如果您有任何特殊问题,请告诉我。