当前位置: 首页 > 面试题库 >

与Flask应用程序同时运行GUI

姬实
2023-03-14
问题内容

我正在尝试围绕我的烧瓶应用程序为办公室中的菜鸟创建一个简单的tkinter GUI窗口。我希望脚本按以下顺序执行这些任务:

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

到目前为止,这是我所拥有的,但是该应用程序独立于tkinter窗口运行,并且在看到gui窗口之前,必须使用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()

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


问题答案:

选件

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

  1. 线程/多线程
  2. 单独的应用

多线程

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

  • tkinter 必须在主线程中运行
  • tkinter 不能从主线程以外的任何线程访问或实现

分开的过程

我建议使用该subprocess模块。如果将我们的功能分成两个应用程序,并使用子过程模块启动/停止flask应用程序,我想您将拥有所需的东西。



 类似资料:
  • 问题内容: 我想知道启动Flask应用程序的正确方法。该文档显示了两个不同的命令: 和 产生相同的结果并正确运行该应用程序。 两者之间有什么区别,以及用于运行Flask应用程序的区别是什么? 问题答案: 该命令是用于与Flask应用进行交互的CLI。该文档介绍了如何使用CLI命令和添加自定义命令。该命令是启动开发服务器的首选方法。 使用环境变量将命令指向您的应用程序。设置为与调试器和重新加载器一起

  • 问题内容: 我有一个现有的Flask应用程序,并且想找到通往另一个应用程序的路线。更具体地说,第二个应用程序是Plotly Dash应用程序。如何在现有的Flask应用程序中运行Dash应用程序? 我还尝试将路由添加到Dash实例,因为它是Flask应用程序,但出现错误: 问题答案: 从文档: 基本的Flask应用程序可从访问app.server。 你还可以将自己的Flask应用实例传递到Dash

  • 我创建了一个dash应用程序来显示另一个代码正在收集的信息,我希望使用Python中的asyncio模块同时运行这两个应用程序。 我的代码使用异步函数,Dash应用程序(基于Flask)在服务时阻止其他任何东西执行。 我不确定这是否需要打开更多的线程。 这是我当前的代码,它只运行主协程。 如何同时运行main和_dashboard?

  • 问题内容: 我的目标是让我的Flask应用程序启动后运行任意代码。这是我所拥有的: 理想情况下,我将能够做到这一点: 但是代码不会继续过去,因此永远不会运行。 我目前正在解决的解决方案是在与分开的线程中运行,创建一个设置此功能的函数: 然后获取)来向应用发出基本请求,以便运行“先请求之前”代码。这相当复杂,难以记录。我宁愿使用Flask中已经提供的参数,也可以使用装饰器,但据我所知,这两个都不存在

  • 问题内容: 我有一个看起来像这样的docker文件: 我需要在某些时候运行flask run来查看我在flask中创建的端点(在文件夹app下)。我该怎么做才能将此添加到此dockerfile? 我认为我还必须让flask运行其他应用程序,因为flask公开了其他应用程序正在收集的数据。我如何让flask调用其他应用程序并使其在后台运行? 问题答案: 我想你不想要那个入口点(也许你确实想要它,但是

  • 问题内容: 我正在使用python更新一些LED。我一直在这样做: 我想用Flask充当一些我可以在我的浏览器中运行的ReactJS前端(以更改当前模式等)与Python中的LED控制代码之间的桥梁。 我的Flask工作正常,可以处理HTTP请求,等等。我想知道如何设置我的flask应用程序同时连续运行(或快速运行),同时仍然能够相互通信,就像这样: 我遇到了,这似乎可以解决问题,但对于我的问题有