showinfo 和 showwarning 在 tkinter.messagebox 的背景中出现
showinfo and showwarning appearing in the background in tkinter.messagebox
我想使用 tkinter.messagebox
显示警告消息和信息消息。我创建并撤销 root
,然后我调用 showwarning
和 showinfo
。根 window 消失了,但是消息框消失了。它实际上进入后台,任务栏上没有按钮。访问它的唯一方法是 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()
这是因为 Flask
正在阻塞 tkinter
,如 所述。解决方法是把tkinter
window放在单独的进程中。因此,问题中的代码变为:
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
我想使用 tkinter.messagebox
显示警告消息和信息消息。我创建并撤销 root
,然后我调用 showwarning
和 showinfo
。根 window 消失了,但是消息框消失了。它实际上进入后台,任务栏上没有按钮。访问它的唯一方法是 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()
这是因为 Flask
正在阻塞 tkinter
,如 tkinter
window放在单独的进程中。因此,问题中的代码变为:
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