已修复此问题已通过将 QApplication 移出 main() 得到解决。
您好,我正在尝试实现一个 Web 服务,该服务执行给定 URL 的 JavaScript 代码并返回最终的 HTML。我使用 PyQt4 进行 JS 处理,并使用 Django 1.4 Web 框架。 问题是:该脚本在命令邀请中始终有效,但是当我将其集成到 Django 时,它仅在第一次运行 Django 本地服务器后才有效,然后在以下执行期间它会发出警告:
WARNING: QApplication was not created in the main() thread
QObject::startTimer: QTimer can only be used with threads started with QThread
我得到了错误的结果。 问题是我没有使用任何线程...... 这是我在 Django 上使用的脚本(urlconf 通过给定的 url 引导至此主要功能):
#!/usr/bin/env python
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
from time import time, sleep
app = QApplication(sys.argv)
def wait(app, secs=1):
deadline = time() + secs
while time() < deadline:
sleep(0)
app.processEvents()
def main(url):
# app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl(url))
wait(app, 15)
return web.page().mainFrame().toHtml().toUtf8()
您以前见过这个或尝试过做类似的事情吗?请帮我提供任何信息,谢谢
附注这是我在这里发表的第一篇文章,我希望一切都清楚:)
编辑感谢 Rostyslav,警告消失了,但我仍然遇到销售问题。
最佳答案
实际上您使用线程。
Django 开发服务器默认使用线程。您可以将可选的 --nothreading
参数传递给 runserver
命令,该命令旨在禁用服务器使用线程:
python ./manage.py runserver --nothreading ...
关于javascript - Python-Django 和 PyQt4 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11988271/