在开始本文各种对话框之前,须要导入以下下几个tkinter模块。 注意Python是严格区分大小写的,因此这里说的是tkinter而非Tkinter。此外,对话框必须依赖于一个tkinter顶级app,因此,在开始使用下文中介绍的对话框之前,除了引入必要的包之外,还需定义顶级app 。相应代码如下:

from tkinter import Tk
from tkinter.simpledialog import askinteger, askfloat, askstring
from tkinter.filedialog import askopenfilename, askopenfilenames, asksaveasfilename, askdirectory
from tkinter.messagebox import showinfo, showwarning, showerror
if __name__ == "__main__":
    app = Tk()  #初始化GUI程序
    app.withdraw() #仅显示对话框,隐藏主窗口
    #下文中对话框的代码放在这里
    app.destroy() #关闭GUI窗口,释放资源
  • 下表罗列了本文中介绍的所有对话框的作用及其常用的参数:
  • 当所编写的程序中需要用户给出一个整型数、浮点型或者字符(串)时,除了直接让用户修改代码外,最直接的办法就是分别使用如下对话框,让用户直接输入,这样可避免不懂代码的小白修改代码。

    (1)整型数输入对话框

    var_int = askinteger(title = "请输入一个整数",
                         prompt = "整型变量x:")
    

    实际编程处理数据时,很多数据都存放在Excel文件、csv文件、tif影像文件中,此时,就需要在程序中定义一个变量并将相应的文件路径赋值给该变量,但一旦将程序拷给别人用,或者自己的数据文件路径发生改变,则需要修改代码。因此,小编推荐大家使用文件对话框的方式,来代替在代码中直接编写文件路径。文件包括打开文件对话框、保存文件对话框、选择文件夹(目录)对话框,这应该是各类程序中用得最多的一组对话框,下面,小编介绍了两个对话框的使用方式。

    (1)打开一个文件对话框

    # 选择打开一个文件
    open_file_path = askopenfilename(title = "请选择一个要打开的Excel文件",
                                     filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                  ("Microsoft Excel 97-20003 文件", "*.xls")])
    

    (2) 打开一个或多个文件对话框

    # 一次性打开多个文件,askopenfilenames,多了一个s,复数形式
    open_file_path_list = askopenfilenames(title = "请选择一个要打开的Excel文件",
                                           filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                        ("Microsoft Excel 97-20003 文件", "*.xls")])
    

    (3)保存文件对话框

    #saveas而非save,此外未指定defaultextension参数时,则需要在对话框中收到添加文件后缀名
    save_file_path = asksaveasfilename(title = "请创建或者选择一个保存数据的Excel文件",
                                       filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                    ("Microsoft Excel 97-20003 文件", "*.xls")],
                                       defaultextension = ".xlsx")
    

    消息对话框的作用是什么?比如,可以在程序运行完毕时,弹出一个对话框告诉用户,程序执行完毕。相对于文件对话框,对于一般的需求来说,如果不做程序的异常处理,则消息对话框的使用场景比较少。这里小编介绍了3个对话框——消息提示对话框、程序警告对话框、程序错误对话框。

    showinfo(title = "提示",
             message = "这是一个提示信息对话框!")
    from tkinter import Tk
    from tkinter.simpledialog import askinteger, askfloat, askstring
    from tkinter.filedialog import askopenfilename, askopenfilenames, asksaveasfilename, askdirectory
    from tkinter.messagebox import showinfo, showwarning, showerror
    if __name__ == "__main__":
        app = Tk()  #初始化GUI程序
        app.withdraw() #仅显示对话框,隐藏主窗口
        showinfo(title = "提示",
                  message = "这是一个提示信息对话框!")
        showwarning(title = "警告",
                    message = "这是一个警告信息对话框!")
        showerror(title = "错误",
                  message = "这是一个错误信息对话框!")
        showinfo(title = "提示",
                  message = "程序程序即将开始运行!")
        var_int = askinteger(title = "请输入一个整数",
                             prompt = "整型变量x:")
        var_float = askfloat(title = "请输入一个浮点数",
                             prompt = "浮点型变量x:")
        var_string = askstring("请输入一个字符或字符串",
                               prompt = "字符型变量x:")
        open_file_path = askopenfilename(title = "请选择一个要打开的Excel文件",
                                         filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                      ("Microsoft Excel 97-20003 文件", "*.xls")])
        open_file_path_list = askopenfilenames(title = "请选择一个或多个要打开的Excel文件",
                                               filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                            ("Microsoft Excel 97-20003 文件", "*.xls")])
        save_file_path = asksaveasfilename(title = "请创建或者选择一个保存数据的Excel文件",
                                           filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                        ("Microsoft Excel 97-20003 文件", "*.xls")],
                                           defaultextension = ".xlsx")
        select_directory = askdirectory(title = "请选择一个文件夹")
        print("var_int:",var_int)
        print("var_float:",var_float)
        print("var_string:",var_string)
        print(open_file_path)
        print(open_file_path_list)
        print(save_file_path)
        print(select_directory)
        showinfo(title = "提示",
                  message = "程序已运行结束!")
        app.destroy() #关闭GUI窗口,释放资源