Kes*_*ter 1 python pyqt pyqt5 qtcore
我刚刚从这里阅读了有关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_())
Run Code Online (Sandbox Code Playgroud)
button.clicked.connect(self.on_click)将按钮(clicked)的信号绑定到插槽self.on_click。没有此绑定,单击将不会执行任何操作。
@pyqtSlot依次是一个装饰器,可将简单的python方法转换为Qt插槽。Doc指出:
尽管PyQt5允许在连接信号时将任何可调用的Python用作插槽,但有时有必要将Python方法显式标记为Qt插槽并为其提供C ++签名。PyQt5提供了pyqtSlot()函数装饰器来执行此操作。
...
将信号连接到经过修饰的Python方法还具有减少使用的内存量的优点,并且速度稍快。
当该装饰必要?
我知道的唯一情况是何时要从QML接口调用方法:可以将派生自QObjectQML 的对象传递给QML并调用对象的方法,但前提是这些方法用@pyqtSlot带有定义签名的装饰器修饰。
对于您的情况,将其视为一种好习惯-将方法表示为某些信号的插槽。
| 归档时间: |
|
| 查看次数: |
8434 次 |
| 最近记录: |