我是python的新手。我正在寻找QtWebkit和Flask创建桌面应用程序的新方法。
这个想法是:不是在用户浏览器上打开Flask Web应用程序,而是在QtWebkit GUI上运行并打开它。
我写了下面的代码,但似乎错了。当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_())
答案 0 :(得分:1)
要使GUI处于活动状态并且响应其主循环必须运行。主循环使用exec_()
调用执行。在您的示例中,控制流永远不会到达此调用,因为app.run()
运行Flask服务器并且不返回。
GUI通常需要在主线程中运行,以便您最好在自己的线程中启动Web应用程序服务器:
from threading import Thread
# ...
app_thread = Thread(target=app.run)
app_thread.daemon = True
app_thread.start()
# ...
start()
方法启动一个新线程,该线程以异步方式运行服务器并返回给调用者。