【问题标题】:How can i create a Modal Dialogue Box by messagebox.showerror如何通过 messagebox.showerror 创建模态对话框
【发布时间】:2018-05-04 05:53:57
【问题描述】:

如何通过 messagebox.showerror 创建模态对话框?

messagebox.showerror("Error", "No downloader.exe found")

当我创建一个消息框时,我发现我可以移动根窗口。 我需要创建一个模态对话框,如 filedialog.askopenfilename。

filedialog.askopenfilename(initialdir = self.get_path()+ '/bin', filetypes=[("BIN Files", ".bin")])

代码如下:

import tkinter
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import os

class Application(Frame):

    def createWidgets(self, main_frame):

        #self.llabel = Label(main_frame, text="Ready", width=20, bg="turquoise", font = ftLabel)
        #self.llabel.grid(row=0, column=0, sticky=W+E) #columnspan=2

        self.frame1 = Frame(main_frame)
        self.frame1.grid(row=0, column=0, columnspan=2, sticky=W+E+N+S)

        self.addr = StringVar()
        self.addrtext = Entry(self.frame1, width=20, textvariable = self.addr)
        self.addrtext.grid(row=0, column=0, sticky=W+E+N+S)
        self.addr.set("0x0")

        self.bfile = Button(self.frame1, text='BIN File', width=20)
        self.bfile.grid(row=0, column=1, sticky=W+E+N+S)

        messagebox.showerror("Error", "No downloader.exe found")

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack(fill=BOTH, expand=1)
        main_frame = Frame(master)
        main_frame.pack(fill="y", expand=1)
        self.createWidgets(main_frame)
        self.dl_thread = 0


if __name__=="__main__":

    root = Tk()

    #lock the root size
    root.resizable(False,False)

    app = Application(master=root)
    app.mainloop()

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    我试过你的代码,messagebox.showerror 对我来说是模态的。

    您的代码中可能还有其他内容(线程?),或者可能是 取决于你的环境。

    作为参考,我的整个代码:

    from tkinter import *
    from tkinter import messagebox          
    
    root = Tk()
    def do(): messagebox.showerror("Error", "No downloader.exe found")
    
    b = Button(root, text='Dialog', command=do)
    b.pack()
    
    root.mainloop()
    

    如果这不起作用,您可能想看看:Tkinter messagebox not behaving like a modal dialog

    【讨论】:

    • 感谢重播。我更新了有问题的代码,请检查。初始化类 Application 时,我在 createWidgets 中调用 messagebox.showerror。而且您仍然可以在显示消息框时移动/关闭主框架
    • 你说得对,问题在于线程。我们需要在另一个线程中打开消息框...
    猜你喜欢
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多