1

修正済みこの問題は、 QApplicationをmain()から移動することで修正されました。

こんにちは私は、指定されたURLのJavaScriptコードを実行し、最終的なHTMLを返すWebサービスを実装しようとしています。JS処理とDjango1.4WebフレームワークにPyQt4を使用しています。問題は次のとおりです。スクリプトは常にコマンドinviteで機能しますが、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()

これを以前に見たことがありますか、または同様のことをしようとしましたか?どんな情報でも助けてくださいありがとう

PSこれはここでの私の最初の投稿です私はすべてが明確であることを願っています:)

編集Rostyslavのおかげで警告は消えましたが、まだ販売の問題があります。

4

1 に答える 1

1

実際にはスレッドを使用します

Django開発サーバーはデフォルトでスレッドを使用します。サーバーによるスレッドの使用を無効にすることを目的としたコマンドにオプションの--nothreadingパラメーターを渡すことができます。runserver

python ./manage.py runserver --nothreading ...
于 2012-08-16T13:56:52.290 に答える