运行 GUI与Flask应用并发
Run GUI concurrently with Flask application
我正在尝试围绕我的 flask 应用程序构建一个简单的 tkinter GUI window,供我办公室的菜鸟使用。我希望脚本按以下顺序执行这些任务:
- 启动 flask 网络服务器
- 一键打开 tkinter GUI window。按下时,该按钮会打开应用程序的索引页面(例如 http://127.0.0.1:5000)
- 当 tkinter gui window 关闭时终止 flask web 服务器
这是我目前所拥有的,但是应用程序 运行 独立于 tkinter window 并且我必须在看到 gui [=27] 之前使用 crtl+c 终止 flask 应用程序=]:
from flask_app import app
from tkinter import tk
import webbrowser
class GUI:
def __init__(self):
app.run()
self.btn = tk.Button(root, text='Open in Browser', command:self.open_browser_tab).pack()
def open_browser_tab(self):
webbrowser.open(url='http:127.0.0.1:5000', new=2)
if __name__ == '__main__':
root = tk.Tk()
GUI(root)
root.mainloop()
那么在应用 运行ning 时我如何 运行 一个进程?
选项
烧瓶应用程序正在阻止您的 GUI。您有两个选择:
- threading/multithreading
- 单独的应用程序
多线程
可以编写 tkinter
具有多线程的应用程序,但您必须小心操作。
tkinter
必须在主线程中 运行
tkinter
无法从主线程以外的任何线程访问或实现
独立进程
我建议使用 subprocess
模块。如果您将我们的功能分成两个应用程序并使用 subprocess 模块 start/stop flask 应用程序,我想您会得到想要的。
我建议看一下 Twisted Python 上 运行 的 Klein web micro-framework。它类似于 Flask,可能会满足您的需求,并允许您 运行 在一个进程中完成所有操作。
您可以将它与各种 UI 工具包的事件循环集成,包括 tkinter。
我正在尝试围绕我的 flask 应用程序构建一个简单的 tkinter GUI window,供我办公室的菜鸟使用。我希望脚本按以下顺序执行这些任务:
- 启动 flask 网络服务器
- 一键打开 tkinter GUI window。按下时,该按钮会打开应用程序的索引页面(例如 http://127.0.0.1:5000)
- 当 tkinter gui window 关闭时终止 flask web 服务器
这是我目前所拥有的,但是应用程序 运行 独立于 tkinter window 并且我必须在看到 gui [=27] 之前使用 crtl+c 终止 flask 应用程序=]:
from flask_app import app
from tkinter import tk
import webbrowser
class GUI:
def __init__(self):
app.run()
self.btn = tk.Button(root, text='Open in Browser', command:self.open_browser_tab).pack()
def open_browser_tab(self):
webbrowser.open(url='http:127.0.0.1:5000', new=2)
if __name__ == '__main__':
root = tk.Tk()
GUI(root)
root.mainloop()
那么在应用 运行ning 时我如何 运行 一个进程?
选项
烧瓶应用程序正在阻止您的 GUI。您有两个选择:
- threading/multithreading
- 单独的应用程序
多线程
可以编写 tkinter
具有多线程的应用程序,但您必须小心操作。
tkinter
必须在主线程中 运行tkinter
无法从主线程以外的任何线程访问或实现
独立进程
我建议使用 subprocess
模块。如果您将我们的功能分成两个应用程序并使用 subprocess 模块 start/stop flask 应用程序,我想您会得到想要的。
我建议看一下 Twisted Python 上 运行 的 Klein web micro-framework。它类似于 Flask,可能会满足您的需求,并允许您 运行 在一个进程中完成所有操作。
您可以将它与各种 UI 工具包的事件循环集成,包括 tkinter。