我不能在pyqt应用程序中使用time.sleep,因为这会冻结GUI线程,所以在此期间GUI将完全冻结。我一直在寻找处理这件事的方法。
我试图使用QTimer,但似乎它们需要链接到另一个函数?比如等十秒钟,然后运行一些函数。有没有办法让它等待,然后继续当前的功能?
def num(self):
for i in range(1,999):
print i
#Add some sleep here
def testSleep(self):
QtCore.QTimer.singleShot(2000, self.num)
我相信您是在问如果num()需要几秒钟才能运行,如何保持GUI的响应性?您有两个选择:
>
QThread
,也许可以做得更好,但您可以始终使用singleShot
以延迟方式运行函数,使用lambda
以参数方式运行函数。
import sys
from PyQt4 import QtGui, QtCore
#def num(self, i):
def num(i):
print i
i += 1
if i < 999:
# run again after 2000ms with argument
QtCore.QTimer.singleShot(2000, lambda:num(i))
#QtCore.QTimer.singleShot(2000, lambda:self.num(i))
app = QtGui.QApplication(sys.argv)
# run first time with start argument
num(1)
#QtCore.QTimer.singleShot(2000, lambda:num(1))
sys.exit(app.exec_())
实际上,我正在寻找time.sleep替代使用pyqt没有使用任何线程概念。
我想出的解决办法是:
from PyQt4 import QtTest
QtTest.QTest.qWait(msecs)
这类似于时间。睡眠使GUI反应灵敏。
谢谢你的回答。
问题内容: 我正在编写一个servlet(特别是Scalatra)。在servlet中,我在目录中包含许多链接,该目录包含在每个页面中。我希望这些链接相对于应用程序基础。如果我使用诸如“ / foo”之类的链接,那么当从根目录(localhost:8080 /)提供servlet时一切正常,但是如果我从Jetty / Tomcat以及其他servlet(localhost:8080 / servl
我正在将MongoDB查询从Javascript移动到Java。对象格式如下: Javascript查询包含以下部分: 我已经翻译了上面使用MongoDBJava驱动程序3 api,并具有以下内容: 我遇到的问题是,我似乎无法使用Mongodb Java驱动程序找到与$objectToArray等价的对象,后续的sum和min操作取决于dot对使用$objectToArray生成的k和v值的操作。
问题内容: 我正在远程计算机上运行一个长Linux程序,但我想停止它,但是我的问题是,如果我使用kill命令,则该程序将退出而不保存结果。通常,完成该程序的工作是使用+ ,在这种情况下,该程序将保存结果,但是现在我不在运行会话的计算机中,因此无法按+ 。 我的问题是:有什么办法可以远程实现+的功能吗? 问题答案: 尝试: 基本上,默认情况下发送(中断)信号,而kill 默认情况下发送(终止)信号,
问题内容: 我正在编写一个GUI应用程序,该应用程序通过Web连接定期检索数据。由于此检索需要一段时间,因此这会导致UI在检索过程中无响应(无法拆分成较小的部分)。这就是为什么我想将Web连接外包给一个单独的工作线程。 [是的,我知道,现在我有两个问题。] 无论如何,该应用程序使用PyQt4,所以我想知道更好的选择是:使用Qt的线程还是使用Python threading模块?各自的优点/缺点是什
以下查询在mongo shell中完美运行。 我想用java编程实现同样的功能。我尝试了以下方法,但没有得到任何结果。
问题内容: 我想将IPython qt控制台窗口小部件嵌入正在处理的PyQt应用程序中。下面提供的代码(并改编自(http://codingdict.com/questions/162023))针对IPython v0.12实现了此功能。然而,这在崩溃的IPython V0.13在该行有。注释掉此行将调出小部件,但不响应用户输入。 有谁知道如何实现IPython v0.13的等效功能? v0.13