2015-12-16 4 views
1

Я новичок в python. Я ищу новый способ создания настольного приложения QtWebkit и Flask.QtWebkit и Flask для создания собственного приложения для рабочего стола

Идея: вместо того, чтобы открывать веб-приложение Flask в браузере пользователя, запускать его и открывать его на графическом интерфейсе QtWebkit.

Я написал следующий код, но кажется неправильным. когда Flask начнет запускать GUI, будет повешен.

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 
from flask import Flask 


app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return "<a href='http://127.0.0.1:5000/test'>AA</a><br />Hello World!" 

@app.route('/test') 
def test(): 
    return 'test' 

pyqt = QApplication(sys.argv) 

web = QWebView() 


if __name__ == "__main__": 

    web.load(QUrl("http://127.0.0.1:5000/")) 
    web.show() 
    app.run() 
    sys.exit(pyqt.exec_()) 

ответ

1

Для того чтобы GUI был активным и отзывчивым, его основной цикл должен работать. Основной цикл выполняется с вызовом exec_(). Контрольный поток никогда не достигает этого вызова в вашем примере, потому что app.run() запускает сервер Flask и не возвращается.

ГПИ обычно нужно запустить в главном потоке, поэтому лучше запустить сервер веб-приложений в своем собственном потоке:

from threading import Thread 

# ... 

app_thread = Thread(target=app.run) 
app_thread.daemon = True 
app_thread.start() 

# ... 

Метод start() запускает новый поток, который запускает сервер асинхронно и возвращается к вызывающему ,

+0

спасибо, не могли бы вы сказать, как закончить 'app.run()' поток, когда приложение закрыто или завершено? – smoqadam

+0

Он должен автоматически останавливаться, когда процесс заканчивается. – BlackJack

+0

Он должен, но это не так. Я использую другой способ: http://codereview.stackexchange.com/questions/114221/python-gui-by-qtwebkit-and-flask – smoqadam

 Смежные вопросы

  • Нет связанных вопросов^_^