在开始本文各种对话框之前,须要导入以下下几个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窗口,释放资源