gpt4 book ai didi

python - 为什么在 PyQt 中使用信号和槽?

转载 作者:行者123 更新时间:2023-11-28 19:35:35 24 4
gpt4 key购买 nike

我正在学习 PyQt(我以前没有使用过 C++ Qt)。

我不明白信号和槽的原因。也就是说,似乎我可以通过直接调用类的方法来完成所有事情。这样做看起来更 Pythonic,使用更少的代码并且更容易阅读。我错过了什么?

为了澄清,我问我为什么要这样做:

def mouseReleaseEvent(self):  
self.clicksignal.connect(ui.iconClicked)
self.clicksignal.emit()

什么时候可以做到:

def mouseReleaseEvent(self): 
ui.iconClicked()

最佳答案

信号和槽存在的原因是因为除了 UI 线程之外,您不能从应用程序的任何其他线程更改 GUI。

如果你有一些繁重的 CPU 密集型计算要做,或者任何等待 IO 的任务或类似的东西......如果你在 UI 线程中执行它(例如,如果你获取一个 url 或持续一段时间的东西) ,您的 UI 线程将很忙,并且 GUI 事件循环将无法自行更新,因此 GUI 看起来像是卡住了。

做这些操作。您在单独的(后台工作线程)线程中执行它们,因此 UI 线程可以继续更新 GUI。

现在的问题是您无法访问 GUI 的元素并从除 UI 线程之外的任何其他线程更改它们的状态。于是引入了信号和槽。当您发出信号时,它保证会在 UI 线程中被捕获,并且插槽将在 UI 线程中执行。

我不太确定您在示例中试图完成什么,但这是信号和槽存在的主要原因。基本上 UI 线程应该只处理 UI,其他所有事情都应该在后台工作线程中完成,后台工作线程发送一个在 UI 线程中捕获的信号,并且更新 GUI 的插槽在 UI 线程中执行。

关于python - 为什么在 PyQt 中使用信号和槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18567988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com