我正在编写一个GUI应用程序,它定期通过Web连接检索数据.由于此检索需要一段时间,因此会导致UI在检索过程中无响应(无法将其拆分为较小的部分).这就是为什么我想将Web连接外包给一个单独的工作线程.
[是的,我知道,现在我有两个问题.]
无论如何,应用程序使用PyQt4,所以我想知道更好的选择是什么:使用Qt的线程还是使用Python threading
模块?每个的优点/缺点是什么?或者你有一个完全不同的建议?
编辑(重新赏金):虽然在我的特定情况下的解决方案可能会使用像Jeff Ober和LukášLalinský建议的非阻塞网络请求(所以基本上将并发问题留给网络实现),我仍然喜欢更多对一般问题的深入回答:
使用PyQt4(即Qt)线程优于本机Python线程(来自threading
模块)的优点和缺点是什么?
编辑2:谢谢大家的答案.虽然没有100%的协议,但似乎普遍认为答案是"使用Qt",因为它的优点是与库的其余部分集成,同时没有造成任何真正的缺点.
对于任何想要在两个线程实现之间进行选择的人,我强烈建议他们阅读这里提供的所有答案,包括abbot链接到的PyQt邮件列表线程.
我考虑了赏金的几个答案; 最后,我选择了abbot作为非常相关的外部参考; 然而,这是一个近距离的电话.
再次感谢.
我在Windows上使用Python 3.4.当我运行脚本时,它会抱怨
ImportError: No Module named 'PyQt4'
Run Code Online (Sandbox Code Playgroud)
所以我试着安装它,但是pip install PyQt4
给了
找不到满足PyQt4要求的任何下载
虽然它确实出现在我跑步时pip search PyQt4
.我试过pip install python-qt
,成功安装,但没有解决问题.
我究竟做错了什么?
如果有人想在Python中开发一个用户界面,那么应该选择哪一个:TkInter或PyQt?
我刚开始使用TkInter,我能够使用标签,按钮,文本框等基本小部件来获得一些简单的UI.只是想知道PyQt与TkInter相比有多好?
干杯
我想更改轴的颜色,以及使用matplotlib和PyQt绘制的绘图的刻度和值标签.
有任何想法吗?
因此,如果我进入QtDesigner并构建一个UI,它将被保存为.ui文件.我怎么能把它作为python文件或在python中使用它?
我有一个程序,通过我在PyQt中编写的gui与我正在使用的收音机连接.显然,无线电的一个主要功能是传输数据,但为了不断地这样做,我必须循环写入,这会导致gui挂起.因为我从未处理过线程,所以我试图摆脱这些挂起使用QCoreApplication.processEvents().
无线电需要在传输之间休眠,所以gui仍然根据这些睡眠的持续时间而挂起.
有没有一种简单的方法可以使用QThread来解决这个问题?我已经找到了有关如何使用PyQt实现多线程的教程,但是大多数都涉及设置服务器,并且比我需要的更先进.老实说,我甚至不需要我的线程在运行时更新任何东西,我只需要启动它,让它在后台传输,然后停止它.
我开始学习一点python,现在想玩gui-building.由于其跨平台性,Qt似乎是一个不错的选择.
现在似乎有两种绑定:Riverbank Computing的PyQt和最初由诺基亚开发的PySide.
那么我应该选择哪一个?我所能找到的只是两年的特征比较,但现在有什么不同?
哪一个更容易使用,有更多/更好的文档?两者还在积极发展吗?
许可证对我来说并不是很重要,因为我不打算编写商业应用程序.
从控制台(Ctrl-C)中杀死PyQt应用程序时退出的正确方法是什么?
目前(我没有特别处理unix信号),我的PyQt应用程序忽略了SIGINT(Ctrl + C).我希望它表现得很好,并在它被杀死时退出.我该怎么办?
在我制作的课程中,我遇到了自定义信号的问题.
相关代码:
self.parse_triggered = QtCore.pyqtSignal()
def parseFile(self):
self.emit(self.parse_triggered)
Run Code Online (Sandbox Code Playgroud)
这两个属于类:RefreshWidget.在它的父类我有:
self.refreshWidget.parse_triggered.connect(self.tabWidget.giveTabsData())
Run Code Online (Sandbox Code Playgroud)
当我尝试运行该程序时,我收到错误:
AttributeError: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect'
Run Code Online (Sandbox Code Playgroud)
救命?提前致谢.
我正在使用PyQt并遇到了这个问题.如果我的import语句是:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
Run Code Online (Sandbox Code Playgroud)
然后pylint给出了数百个"未使用的导入"警告.我很犹豫要把它们关闭,因为可能有其他未使用的导入实际上很有用.另一种选择是这样做:
from PyQt4.QtCore import Qt, QPointF, QRectF
from PyQt4.QtGui import QGraphicsItem, QGraphicsScene, ...
Run Code Online (Sandbox Code Playgroud)
and I end up having 9 classes on the QtGui line. There's a third option, which is:
from PyQt4 import QtCore, QtGui
Run Code Online (Sandbox Code Playgroud)
and then prefix all the classes with QtCore or QtGui whenever I use them.
At this point I'm agnostic as to which one I end up doing in my project, although the last one seems the …
pyqt ×10
python ×9
pyqt4 ×4
qt ×2
signals ×2
colors ×1
linux ×1
matplotlib ×1
pip ×1
pylint ×1
pyside ×1
python-3.x ×1
qt-designer ×1
qthread ×1
tkinter ×1