按名称使用自动连接插槽



不久前,我一直在使用(在给定的工作框架中)Qt4中按名称自动连接插槽功能,并带有装饰器。像这样:

self.button1 = QtWidgets.QPushButton("Click me!")
...
@QtCore.Slot()
def on_button1_clicked(self):
     # whatever the method does...

取而代之的是:

self.button1 = QtWidgets.QPushButton("Click me!")
self.button1.clicked.connect(self.handle_button)
...
def self.handle_button(self):
    # whatever the method does...

现在我无法让它与PySide2(Qt-5.12)一起工作。我在这里缺少什么来使其工作?

import sys
import random
from PySide2 import QtCore, QtWidgets, QtGui
class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.hello = ["Hallo Welt", "Hola Mundo"]
        self.button1 = QtWidgets.QPushButton("Click me!")
        self.text = QtWidgets.QLabel("Hello World")
        self.text.setAlignment(QtCore.Qt.AlignCenter)
        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button1)
        self.setLayout(self.layout)
        QtCore.QMetaObject.connectSlotsByName(self)
        #self.button1.clicked.connect(self.on_button1_clicked)
    @QtCore.Slot()
    def on_button1_clicked(self):
        self.text.setText(random.choice(self.hello))

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())

connectSlotsByName功能通常用于Qt Designer文件。当这些文件使用 uic 工具转换时,会添加大量样板代码。这包括设置对象名称,这是按名称连接插槽时所必需的:

self.button1 = QtWidgets.QPushButton("Click me!")
self.button1.setObjectName('button1')

显然,对象名称必须与插槽中使用的名称匹配。

最新更新