PyQt5 是单独线程中的 QTimer 运行 并且它是否阻塞?

PyQt5 is QTimer running in separate thread and is it blocking?

我有一个使用数据库的应用程序。我想设置一个计时器来启动一个函数,该函数将定期修改数据库。但是我想确保它是阻塞的,所以在这个函数完成之前不会对 db 进行读写操作。

我的 QTimer 在 GUI 线程中,据我所知,它的插槽会阻塞主线程。我说的对吗?

    class AppLauncher(QtWidgets.QMainWindow, AppWindow.Ui_MainWindow):
        def __init__(self, parent=None):
            super(AppLauncher, self).__init__(parent)
            self.setupUi(self)
            flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
            self.setWindowFlags(flags)
            self.setWindowState(QtCore.Qt.WindowFullScreen)

            self.fooTimer = QTimer(self)
            self.fooTimer.timeout.connect(self.foo)

        def foo(self):
            pass

    def main():
        app = QApplication(sys.argv)
        form = AppLauncher()
        form.show()
        app.exec_()

    if __name__ == '__main__':
        main()

QTimer 总是 运行 在它创建和启动的线程中,但这并不重要,因为它不会改变 timeout 连接函数的结果行为,即使它在另一个线程中执行。

始终重要的是 slot/function 所在的线程,只要 foo 是一个实例的成员,该实例位于您想要的任何其他函数的同一线程中”块”,它将按预期工作,阻止执行任何其他操作,直到 returns。