在 Qt 的槽中使用任何 'return' 语句会产生什么影响
What effect will exist when using any 'return' statement inside Qt's slot
例如,我将 QPushButton 的 'clicked' 信号连接到名为 'func_with_return' 的函数。假设这个函数中只有三个语句:第一个是'print('start')',第二个是'return 1',最后一个是'print('end')' .有我的 python 基于 PyQt5 的代码。
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_())
基本上点击这个按钮后就没有报错了。我很好奇的是'slot'里面的'return'造成的中断。这个中断会不会和signal&slot机制有冲突?
None。信号只调用函数,如果函数 returns Qt 不会使用它。
另一方面,在 Qt/PyQt 中,如果您使用装饰器 @QtCore.pyqtSlot()
,则函数是 slot。在您的情况下,这是一个简单的功能。即使如此,信号也不会提供 return 插槽或函数调用的数据。
这个中断会不会和signal&slot机制有冲突?
不,它没有碰撞。回到开头,中间或结尾是无关紧要的,记住每个函数 return 的东西(如果你不使用 return 函数将隐式地 return None 在结尾) .
另一方面,在 GUI 中,函数的任务必须轻,如果它们很重,则必须在另一个线程中执行。
例如,我将 QPushButton 的 'clicked' 信号连接到名为 'func_with_return' 的函数。假设这个函数中只有三个语句:第一个是'print('start')',第二个是'return 1',最后一个是'print('end')' .有我的 python 基于 PyQt5 的代码。
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_())
基本上点击这个按钮后就没有报错了。我很好奇的是'slot'里面的'return'造成的中断。这个中断会不会和signal&slot机制有冲突?
None。信号只调用函数,如果函数 returns Qt 不会使用它。
另一方面,在 Qt/PyQt 中,如果您使用装饰器 @QtCore.pyqtSlot()
,则函数是 slot。在您的情况下,这是一个简单的功能。即使如此,信号也不会提供 return 插槽或函数调用的数据。
这个中断会不会和signal&slot机制有冲突?
不,它没有碰撞。回到开头,中间或结尾是无关紧要的,记住每个函数 return 的东西(如果你不使用 return 函数将隐式地 return None 在结尾) .
另一方面,在 GUI 中,函数的任务必须轻,如果它们很重,则必须在另一个线程中执行。