首页 > 解决方案 > showinfo 和 showwarning 出现在 tkinter.messagebox 的背景中

问题描述

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

如果我注释掉root.withdraw()调用,根目录和消息框都会出现。

我究竟做错了什么?

代码:

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

标签: pythontkintermessagebox

解决方案


这是因为Flask正在阻塞,如此tkinter所述。解决它的方法是将窗口放在单独的进程中。因此,问题中的代码变为: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变量不应设置为开发


推荐阅读