我刚从here上读到一篇关于pyqt5按钮的教程。代码如下。有一个关于button.clicked.connect(self.on_click)
和@pyqtSlot()
的问题。如果我从代码中删除@pyqtSlot()
,它仍然可以工作。但是,如果我从代码中删除button.clicked.connect(self.on_click)
,则该按钮不起作用。那么这段代码中@pyqtSlot()
的功能是什么?
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
class App(QWidget):
def __init__(self):
super().__init__()
self.title = 'PyQt5 button - pythonspot.com'
self.left = 10
self.top = 10
self.width = 320
self.height = 200
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
button = QPushButton('PyQt5 button', self)
button.setToolTip('This is an example button')
button.move(100,70)
button.clicked.connect(self.on_click)
self.show()
@pyqtSlot()
def on_click(self):
print('PyQt5 button click')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
button.clicked.connect(self.on_click)
将按钮(clicked
)的信号绑定到插槽self.on_click
。如果没有此绑定,单击将不会导致任何操作。@pyqtSlot
是一个decorator,它将简单的python方法转换为Qt槽。Doc状态:什么时候装修是必要的?
我知道的唯一一种情况是,当您想从QML接口调用方法时:您可以将从
QObject
派生的对象传递给QML并调用对象的方法,但前提是这些方法使用具有定义签名的@pyqtSlot
装饰器进行装饰。对于您的情况,请将其视为一个良好的实践-将方法表示为某个信号的时隙。
相关问题 更多 >
编程相关推荐