按名称使用自动连接插槽
Using the automatic connect slots by name
不久前,我一直在使用(在工作中的给定框架中)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')
显然,对象名称必须与插槽中使用的名称匹配。
不久前,我一直在使用(在工作中的给定框架中)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')
显然,对象名称必须与插槽中使用的名称匹配。