python - 在 Qt 的 slot 中使用任何 'return' 语句会产生什么影响
问题描述
例如,我将 QPushButton 的“点击”信号连接到名为“func_with_return”的函数。假设这个函数中只有三个语句:第一个是'print('start')',第二个是'return 1',最后一个是'print('end')'。我有基于 PyQt5 的 python 代码。
import sys
from PyQt5.QtWidgets import QApplication, QFrame, QPushButton
class MyWindow(QFrame):
def __init__(self):
super(MyWindow, self).__init__()
self.layout_init()
self.layout_manage()
def layout_init(self):
self.setFixedSize(800, 600)
self.button01 = QPushButton('click!', self)
self.button01.setFixedSize(100, 100)
self.button01.clicked.connect(self.func_with_return)
def layout_manage(self):
pass
def func_with_return(self):
print('---------func_with_return starts---------')
return 1
print('---------func_with_return ends---------')
if __name__ == '__main__':
app = QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
sys.exit(app.exec_())
基本上点击这个按钮后没有报错。我很好奇的是“槽”内的“返回”引起的中断。这个中断会不会和signal&slot机制发生冲突?
解决方案
没有任何。信号只调用函数,如果函数返回 Qt 将不会使用它。
另一方面,在 Qt/PyQt 中,如果你使用 decorator ,函数就是一个插槽@QtCore.pyqtSlot()
。在您的情况下,这是一个简单的功能。即使这样,信号也不会提供返回所调用的槽或函数的数据。
这个中断会不会和signal&slot机制发生冲突?
不,它没有碰撞。返回开头、中间或结尾无关紧要,记住每个函数都会返回一些东西(如果不使用 return,函数将在结尾隐式返回 None)。
另一方面,在 GUI 中,函数的任务必须很轻,如果它们很重,则必须在另一个线程中执行它。
推荐阅读
- c - CPU 使用率 C Packed struct vs Unsigned Long Long 操作
- vb.net - 从 MySQL 创建的数据表中将日期添加到 datagridview 作为 dd-MM-yyyy
- request - 在 PDP 端搜索 xacml 策略的最佳实践?
- c# - 构造函数中具有参数的 autfac 注入服务
- docker - 如何在带有单声道的 Docker 容器中安装 MS Office?
- c# - 访问字典
- python - 具有总和编辑轴限制的堆叠条形图 - python
- laravel - 使用 Laravel/VueJS 向 CKEditor 5 添加字体选项
- spring - 如何在 JobExecutionListener 中自动装配服务?
- swift - 为什么我的 swift 应用程序在 AVAsset 中“泄漏”内存