与Flask应用程序同时运行GUI

时间:2017-11-07 23:40:14

标签: python user-interface flask python-multiprocessing

我试图围绕我的烧瓶应用程序在我办公室的新手上建立一个简单的tkinter GUI窗口。我希望脚本按以下顺序执行这些任务:

  • 启动烧瓶网络服务器
  • 使用一个按钮打开tkinter GUI窗口。按下该按钮后,该按钮将打开应用程序的索引页面(例如http://127.0.0.1:5000
  • 关闭tkinter gui窗口时终止烧瓶Web服务器

这是我到目前为止,但应用程序独立于tkinter窗口运行,我必须使用crtl + c终止烧瓶应用程序,然后才能看到gui窗口:

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()

那么如何在应用运行时运行流程?

2 个答案:

答案 0 :(得分:2)

选项

烧瓶应用程序阻止了您的GUI。您有两种选择:

  1. 穿线/多线程
  2. 单独的申请
  3. 多个线程

    可以使用多个线程编写tkinter个应用程序,但您必须注意这样做。

    • tkinter必须在主线程
    • 中运行 无法从主要以外的任何线程访问或实施
    • tkinter

    单独进程

    我建议使用subprocess模块。如果你将我们的功能分成两个应用程序并使用子进程模块来启动/停止烧瓶应用程序,我想你会得到你想要的东西。

答案 1 :(得分:1)

我建议你看一下在Twisted Python上运行的Klein web micro-framework。它与Flask类似,可能适合您的需求,并允许您在一个过程中运行它。

您可以将其与各种UI工具包的事件循环集成,包括tkinter