我是 python 的新手。我正在寻找通过 QtWebkit 和 Flask 创建桌面应用程序的新方法。
想法是:与其在用户浏览器上打开 Flask 网络应用程序,不如在 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_())
请您参考如下方法:
要使 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() 方法启动一个异步运行服务器并返回给调用者的新线程。
