目录

  • 十六、Tkinter的对话框控件
  • 16.1 `filedailog` 文件选择对话框
  • 16.2 `colorchooser` 颜色选择对话框
  • 16.3 `messagebox` 消息对话框


十六、Tkinter的对话框控件

对话框的使用能够在一定程度上增强用户的交互体验。

16.1 filedailog 文件选择对话框

filedailog 文件选择对话框的常用方法如下 -

名称

说明

Open()

打开个某个文件

SaveAs()

打开一个保存文件的对话框

askopenfilename()

打开某个文件,并以包函文件名的路径作为返回值

askopenfilenames()

同时打开多个文件,并以元组形式返回多个文件名

askopenfile()

打开文件,并返回文件流对象

askopenfiles()

打开多个文件,并以列表形式返回多个文件流对象

asksaveasfilename()

选择以什么文件名保存文件,并返回文件名

asksaveasfile()

选择以什么类型保存文件,并返回文件流对象

askdirectory

选择目录,并返回目录名

上述方法的常用参数值如下 -

名称

说明

defaultextension

指定文件的后缀名,当保存文件时自动添加文件名,如果自动添加了文件的后缀名,则该选项值不会生效

filetypes

指定筛选文件类型的下拉菜单选项,该选项值是由 2 元祖构成的列表,其中每个二元祖由两部分组成 (类型名,后缀),比如 filetypes = [(“PNG”,“.png"), (“JPG”, ".jpg”), (“GIF”,“.gif"),(“文本文件”,".txt”)…]

initialdir

指定打开/保存文件的默认路径,默认路径是当前文件夹

parent

如果不指定该选项,那么对话框默认显示在根窗口上,通过设置该参数可以使得对话框显示在子窗口上

title

指定文件对话框的标题

from tkinter import (
    Tk, filedialog, Label, Button, RAISED
)

win = Tk()
win.title("Python自学网")
win.config(bg="pink")
win.geometry('380x270')
# 窗口不允许改变
win.resizable(0, 0)
win.iconbitmap('./python.png')


# 定义一个处理文件的相关函数
def askfile():
    # 从本地选择一个文件,并返回文件的目录
    filename = filedialog.askopenfilename()
    if filename != '':
        lb.config(text=filename)
    else:
        lb.config(text='您没有选择任何文件')


btn = Button(win, text='选择文件', relief=RAISED, command=askfile)
btn.grid(row=0, column=0)
lb = Label(win, text='', bg='#87CEEB')
lb.grid(row=0, column=1, padx=5)
# 显示窗口
win.mainloop()
from tkinter import (
    Tk, filedialog, StringVar, Button, Entry
)

from PIL import Image

win = Tk()
win.title("Python自学网")
win.config(bg="pink")
win.geometry('380x270')
# 窗口不允许改变
win.resizable(0, 0)
win.iconbitmap('./python.png')


def open_img():
    try:
        global img
        filepath = filedialog.askopenfilename()  # 打开文件,返回该文件的完整路径
        filename.set(filepath)
        img = Image.open(filename.get())
    except Exception as e:
        print("您没有选择任何文件", e)


def save_png():
    try:
        filetypes = [("PNG", "*.png"), ("JPG", "*.jpg"), ("GIF", "*.gif"), ("txt files", "*.txt"), ('All files', '*')]
        # 返回一个 pathname 文件路径字符串,如果取消或者关闭则返回空字符,返回文件如何操作是后续代码的事情,
        # 该函数知识返回选择文件的文件名字,不具备保存文件的能力
        filenewpath = filedialog.asksaveasfilename(title='保存文件',
                                                   filetypes=filetypes,
                                                   defaultextension='.png',
                                                   initialdir='C:/Users/Administrator/Desktop')
        path_var.set(filenewpath)
        # 保存文件
        img.save(str(path_var.get()))
    except Exception as e:
        print(e)


filename = StringVar()
path_var = StringVar()
# 定义读取文件的组件
entry = Entry(win, textvariable=filename)
entry.grid(row=1, column=0, padx=5, pady=5)
Button(win, text='选择文件', command=open_img).grid(row=1, column=1, padx=5, pady=5)
# 定义保存文件的组件
entry1 = Entry(win, textvariable=path_var)
entry1.grid(row=2, column=0, padx=5, pady=5)
Button(win, text='保存文件', command=save_png).grid(row=2, column=1, padx=5, pady=5)
win.mainloop()

16.2 colorchooser 颜色选择对话框

colorchooser 颜色选择对话框的常用方法

名称

说明

askcolor()

打开一个颜色对话框,并将用户选择的颜色值以元组的形式返回(没选择返回None),格式为((R, G, B), “#rrggbb”)

Chooser()

打开一个颜色对话框,并用户选择颜色确定后,返回一个二元组,格式为((R, G, B), “#rrggbb”)

上述方法的常用参数值如下 -

名称

说明

default

要显示的初始的颜色,默认颜色是浅灰色(light gray)

title

指定颜色选择器标题栏的文本,默认标题为“颜色”

parent

1. 如果不指定该选项,那么对话框默认显示在根窗口上 2. 如果想要将对话框显示在子窗口上,那么可以设置 parent = 子窗口对象

from tkinter import (
    Tk, colorchooser, Label, Button
)

win = Tk()
win.title("Python自学网")
win.config(bg="pink")
win.geometry('380x270')
# 窗口不允许改变
win.resizable(0, 0)
win.iconbitmap('./python.png')


def callback():
    # 打开颜色对话款
    colorvalue = colorchooser.askcolor()
    # 在颜色面板点击确定后,会在窗口显示二元组颜色值
    lb.config(text='颜色值:'+ str(colorvalue))
lb=Label(win,text='',font=('宋体',10))
# 将label标签放置在主窗口
lb.pack()
Button(win, text="点击选择颜色", command=callback, width=10, bg='#9AC0CD').pack()
# 显示界面
win.mainloop()

16.3 messagebox 消息对话框

messagebox 消息对话框的常用方法 -

名称

说明

askokcancel(title=None, message=None)

打开一个“确定/取消”的对话框

askquestion(title=None, message=None)

打开一个“是/否”的对话框。

askretrycancel(title=None, message=None)

打开一个“重试/取消”的对话框

askyesno(title=None, message=None)

打开一个“是/否”的对话框

showerror(title=None, message=None)

打开一个错误提示对话框

showinfo(title=None, message=None)

打开一个信息提示对话框

showwarning(title=None, message=None)

打开一个警告提示对话框

上述方法的常用参数值如下 -

名称

说明

default

1. 设置默认的按钮(也就是按下回车响应的那个按钮) 2. 默认是第一个按钮(像“确定”,“是”或“重试”) 3. 可以设置的值根据对话框函数的不同,可以选择 CANCEL,IGNORE,OK,NO,RETRY 或 YES

icon

1. 指定对话框显示的图标 2. 可以指定的值有:ERROR,INFO,QUESTION 或 WARNING 3. 注意:不能指定自己的图标

parent

1. 如果不指定该选项,那么对话框默认显示在根窗口上 2. 如果想要将对话框显示在子窗口上,那么可以设置 parent= 子窗口对象

from tkinter import messagebox

result = messagebox.askokcancel("提示", " 你确定要关闭窗口吗? ")
# 返回布尔值参数
print(result)