在Qt的插槽中使用任何“return”语句时会有什么影响

问题描述 投票:2回答:1

例如,我将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_())

基本上,单击此按钮后没有错误。我很好奇的是'插槽'内部'返回'造成的中断。这种中断是否会与信号和插槽机制发生冲突?

python pyqt pyqt5 qt-signals qt-slot
1个回答
2
投票

没有。信号只调用该函数,如果函数返回Qt则不会使用它。

另一方面,在Qt / PyQt中,如果你使用装饰器@QtCore.pyqtSlot(),则说一个函数是一个槽。在您的情况下,它是一个简单的功能。即使这样,信号也不会为返回调用的槽或函数的数据提供服务。

这种中断是否会与信号和插槽机制发生冲突?

不,它没有碰撞。回到开头,中间或结尾是无关紧要的,记住每个函数都返回一些东西(如果你不使用return函数将隐式返回None)。


另一方面,在GUI中,函数的任务必须很轻,如果它们很重,则必须在另一个线程中执行它。

© www.soinside.com 2019 - 2024. All rights reserved.