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

时间:2019-02-27 03:40:31

标签: python qt pyqt signals-slots qt-signals

例如,我将QPushButton的“ clicked”信号连接到名为“ 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_())

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

1 个答案:

答案 0 :(得分:1)

没有。信号仅调用该函数,如果该函数返回Qt将不使用它。

另一方面,在Qt / PyQt中,如果使用修饰符@QtCore.pyqtSlot(),则说函数是 slot 。就您而言,这是一个简单的功能。即使这样,对于信号来说,也不会提供返回所调用的插槽或函数的数据。

此中断会与信号和插槽机制冲突吗?

否,它没有碰撞。返回开头,中间或结尾无关紧要,请记住每个函数都会返回一些内容(如果不使用return,则该函数将在结尾处隐式返回None。)


另一方面,在GUI中,功能的任务必须轻巧,如果繁琐,则必须在另一个线程中执行。