showinfo和showwarning出现在tkinter.messagebox的后台

2024-04-19 01:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用tkinter.messagebox显示警告消息和信息消息。我创建并提取root,然后调用showwarningshowinfo。根窗口消失,但不显示消息框。它实际上进入后台,任务栏上没有按钮。访问它的唯一方法是alt+tab

如果我注释掉root.withdraw()调用,则会同时显示root和消息框

我做错了什么

代码:

import tkinter as tk
from tkinter.messagebox import showinfo, showwarning

def create_database():
    root = tk.Tk()
    root.withdraw()
    if os.path.exists(create_url()):
        showwarning('Failure', 'You failed!')
    else:
        showinfo('Success!', 'Everything went fine')
    root.destroy()

Tags: import信息消息警告tkintercreateroottk
1条回答
网友
1楼 · 发布于 2024-04-19 01:28:17

这是因为Flask正在阻塞tkinter,如here所述。解决这个问题的方法是将tkinter窗口放在不同的进程中。因此,问题中的代码变成:

from multiprocessing import Process
from tkinter.messagebox import showinfo, showwarning

def show_warning_window():
    root = tk.Tk()
    root.withdraw()
    showwarning('File exists', 'The database file already exists!')
    root.destroy()


def show_info_window():
    root = tk.Tk()
    root.withdraw()
    showinfo('Success!', 'The database was created.')
    root.destroy()


def create_database():
    if os.path.exists(create_url()):
        p = Process(target=show_warning_window)
        p.start()
        p.join()
    else:
        engine = create_engine(create_uri(), echo=True)
        Base.metadata.create_all(engine)
        p = Process(target=show_info_window)
        p.start()
        p.join()

稍后编辑:要使其正常工作,重要的是服务器不应处于开发模式。set_env变量不应设置为development

相关问题 更多 >