我正在创建一个使用PySide自动加载网页和创建屏幕截图的应用程序(不,我不能使用现有解决方案之一)。该应用程序的一部分会获取URL列表,并使用 new QWebPage对象依次加载每个URL。页面加载后,将截取屏幕快照,并删除QWebPage对象。

每隔一段时间,只要有足够的运行,我就会从PySide收到以下错误,作为RuntimeError异常: 通用标签

第一行打印到STDERR(可能是Qt?),第二行是Python异常。

loadStarted()是内置的QWebPage信号,不是我创建的。这在90%的时间内有效,而且我无法弄清是什么导致它偶尔失败。

说实话,此应用在设计上非常不寻常,因为它将PySide / Qt钩接到uWSGI服务的Web应用中-举例来说,这意味着我不使用QApplication事件循环,而是使用每个页面的本地事件循环加载。我也没有Qt或Python的经验,所以我可能犯了很多错误,但我不知道是什么错误。

我正在考虑这篇帖子可能与此有关,但是我没有把握。

关于下一步的建议?

更新:信号通过以下代码连接: 通用标签

MyWebPage对象是作为不同的单个QObject实例的子代创建的,直到进程关闭,该实例才被删除。完成对它们的调用后,可以通过调用page.deleteLater()将其删除。由于我正在运行本地事件循环,因此我会在退出本地事件循环后通过调用以下内容触发延迟删除: 通用标签

有帮助吗?

解决方案 2

在升级到PySide 1.2.1之后,这个问题和其他问题终于以一种体面的方式得以解决。

其他提示

我遇到了同样的问题(我偶尔会遇到这些错误,但是我无法始终如一地重现它)。我认为您可能是对的,这与尝试将信号连接到它们时不存在的方法有关-只是为了测试,我将.connect调用放在单独的方法中,错误消失了。例如:

编辑: (几个小时后)我想我讲得太早了-我又遇到了错误。

更新: (几周后)

我经常使用语法,有时甚至遇到RuntimeError(可能此错误在PySide中?)。我仍然不确定为什么,但是由于错误不一致地发生,因此您可以安全地强制执行以下操作: 通用标签

如果您真的希望安全,可以保留一个循环计数器,如果在某个阈值之前信号未正确连接,则可能会使程序崩溃。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top