Wil*_*bur 2 python qt pyqt signals-slots qt-signals
我正在学习PyQt(之前我没有使用过C++ Qt).
我不明白信号和插槽的原因.也就是说,我似乎可以通过直接调用类的方法来完成所有操作.这样做似乎更Pythonic,使用更少的代码,更容易阅读.我错过了什么?
为了澄清,我问为什么我会这样做:
def mouseReleaseEvent(self):
self.clicksignal.connect(ui.iconClicked)
self.clicksignal.emit()
Run Code Online (Sandbox Code Playgroud)
当我能做到这一点:
def mouseReleaseEvent(self):
ui.iconClicked()
Run Code Online (Sandbox Code Playgroud)
信号和插槽存在的原因是因为除了UI线程之外,您无法从应用程序的任何其他线程更改GUI.
如果你要做一些繁重的CPU密集型计算,或者等待IO或类似的任何任务...如果你这样做UI线程(例如,如果你获取一个url或持续一段时间的东西),你的UI线程将忙,GUI事件循环将无法自行更新,因此GUI似乎已冻结.
做这些操作.您在一个单独的(后台工作程序)线程中执行它们,因此UI线程可以继续更新GUI.
现在的问题是,您无法访问GUI的元素并从除UI线程之外的任何其他线程更改其状态.因此引入了信号和插槽.当您发出信号时,它确保被捕获在UI线程中,并且插槽将在UI线程中执行.
我不确定你在你的例子中想要完成什么,但这是信号和插槽存在的主要原因.基本上UI线程应该只处理UI,其他一切都应该在后台工作线程中完成,该线程发送一个在UI线程中捕获的信号,并且更新GUI的槽在UI线程中执行.
| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |