【问题标题】:Command execution on closing "X" Tkinter MessageBox关闭“X”Tkinter MessageBox 时执行命令
【发布时间】:2022-01-03 15:38:11
【问题描述】:

当我单击 tkinter 消息框中的“X”按钮时,我正在尝试重新启动我的主 GUI/暂停程序流。知道我该怎么做吗?

PS:我已经阅读了许多关于关闭主 GUI 本身的线程,但没有特定于消息框

默认情况下,当单击“确定”或关闭消息框时,我的代码会继续使用 filedailog.askdirectory() 方法向我询问输出路径

My message box and the main GUI in the background

【问题讨论】:

    标签: python user-interface tkinter messagebox tkmessagebox


    【解决方案1】:

    没有简单的方法可以将自定义处理程序添加到“X”按钮。我认为最好使用消息框的messagebox.askokcancel() 变体而不是showinfo,如果返回结果为False,则停止程序:

    import tkinter as tk
    from tkinter import messagebox, filedialog
    
    root = tk.Tk()
    
    
    def show_messagebox():
        result = messagebox.askokcancel("Output path", "Please select an output file path")
        if result:
            filedialog.askdirectory()
        else:
            messagebox.showinfo("Program is halted")
    
    
    tk.Button(root, text="Show messagebox", command=show_messagebox).pack()
    
    root.mainloop()
    

    或者,更简单的是,您可以直接显示filedialog.askdirectory()。如果用户不想选择目录,可以点击“取消”按钮,然后程序检查是否返回空值,如果有则停止:

    import tkinter as tk
    from tkinter import messagebox, filedialog
    
    root = tk.Tk()
    
    
    def show_askdirectory():
        directory = filedialog.askdirectory(title="Please select an output file path")
        if not directory:
            messagebox.showinfo(message="The program is halted")
        else:
            messagebox.showinfo(message="Chosen directory: " + directory)
    
    
    tk.Button(root, text="Choose directory", command=show_askdirectory).pack()
    
    root.mainloop()
    

    【讨论】:

    • 第二个选项实际上是一个非常聪明的解决方案。谢谢!
    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    相关资源
    最近更新 更多