QtWebkit和hasPendingEvents()总是Tru

2024-03-28 09:04:19 发布

您现在位置:Python中文网/ 问答频道 /正文


我使用projectwebkit2png(略加附加)在Linux中截图。在运行最新版本QtWebkit和python2.6的服务器上

在某些网站(如118114.cn)出现问题,应用程序将永远挂起。调试显示此代码段中的问题:

while self.__loading:
   if timeout > 0 and time.time() >= cancelAt:
      raise RuntimeError("Request timed out on %s" % url)
   while QApplication.hasPendingEvents():
      QCoreApplication.processEvents()

源代码的完整版本可用here(第270-275行)

无论如何,加载事件挂起和hasPendingEvents不能为False。在

大多数屏幕截图都是正常创建的,但有时由于某些网址的原因,我的应用程序:(

有人知道如何解决这个问题吗?事件为什么会挂起?在


Tags: self版本服务器应用程序time网站linux代码段
3条回答

我也在使用webkit2png+Linux,在我的macbookpro上进行本地测试时遇到了您描述的问题。问题似乎是QApplication.hasPendingEvents()错误地返回True,while循环挂起。我通过删除while循环来解决这个问题:

while self.__loading:
   if timeout > 0 and time.time() >= cancelAt: 
      raise RuntimeError("Request timed out on %s" % url) 
   QCoreApplication.processEvents()

请注意,您还需要在__webkitrenderhelper.render在几个地方。做了这些改变后一切都对我有用-祝你好运。在

编辑:我相信我最初是通过升级底层QT库来解决Linux方面的这个问题的。Ubuntu10.04LTS(4.6.2)的默认版本有一个bug,在以后的版本中已经修复了。以下是我的安装信息:

^{pr2}$

也许有一个重复的计时器?例如,页面上闪烁的光标将导致事件(计时器触发、视图失效、绘制等)持续可用。在

您可能需要插入一个超时逻辑,以便while循环退出,如果它已经运行太长时间了。在

我升级了libqtcore4,但这并不能解决我的问题。我不得不对webkit2进行Jeremy建议的更改巴布亚新几内亚.py在

# aptitude show libqtcore4
Package: libqtcore4
State: installed
Automatically installed: no
Version: 4:4.7.2-0ubuntu6.1

在第230行附近还有两个对hasPendingEvents()的调用

^{pr2}$

processEvents()将运行所有挂起的事件,最多3秒。到目前为止我还可以。不会呈现的网站现在出现了没有任何问题。如果需要超过3秒(服务器忙?)那么235上的while循环需要超时。在

相关问题 更多 >