如果您不使用信号槽机制并滚动您自己的事件循环,那么真正使用 Qt/PyQt 是没有意义的。基本上,您将重新实现框架本身的核心。但我猜这不是你要问的。
如果您能稍微澄清一下您的问题,那就太好了(因为我不得不做出一些假设),但这是交易:
我认为您对信号和插槽机制的作用有些困惑。(或者可能不是,请原谅我重申了一些对你来说可能很明显的东西)。
信号和槽不为您实现线程(因此使用信号/槽比标准 Python 线程有任何好处的问题是没有实际意义的)
您可能假设信号槽机制是多线程的,并且当信号调用槽时,它会在新线程中执行。好吧,事实并非如此。
Qt 中的信号和槽机制在 Qt 中的单个事件循环中运行(由 QApplication 实现),它本身在单个线程中运行。所以信号和槽无论如何都不能替代多线程。
如果有一个插槽阻塞,那么它将阻塞您的整个应用程序。因此,理想情况下,任何阻塞 I/O 或时间密集型函数都应位于与 UI 不同的线程中,并且您的插槽应开始执行这些线程。现在是否使用 QThread 或标准 Python 线程来实现自己的线程是另一个问题,之前在 StackOverflow 上也有人问过,但我倾向于将 QThreads 用于 Qt 应用程序。
因此,如果您有一个按钮,并且您想在单击请求库时开始下载文件,您会将clicked
QPushButton 的信号连接到一个插槽,例如downloadButtonClicked
,该插槽将启动一个新的 QThread注意使用请求下载文件。您可以进一步连接来自 QThread 的 finished() 信号,以了解下载何时完成并更新您的 UI
(如果这确实是您要问的,我将添加一个代码示例。所以请澄清您的问题)