Python Tkinter 教程(四)—— 子模块 messagebox、colorchooser 以及 filedialog 的使用及技巧(万字详解)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
>>>【 上节回顾三种几何布局管理器Pack、Place和Grid的详细用法 】<<<
Python Tkinter教程四
这篇博客将详细介绍 tkinter 模块的子模块如消息框子模块messagebox、颜色选择器子模块colorchooser以及文件对话框子模块filedialog
目录
一、messagebox 子模块
一般用法
messagebox 子模块的一般作用就是产生一个消息框提供的消息框种类有 8 个下面将一个一个介绍
【showinfo】
showinfo(title=None, message=None, **options)
信息提示消息框
【title】弹窗的标题
【message】字符串要显示的信息
【options】其他选项具体见高级操作
【返回值】字符串对象
【提示音】信息提示音
代码示例
import tkinter.messagebox
return_value = tkinter.messagebox.showinfo('温馨提示', '您还没有给我点赞哦\n记得点赞不要忘记啦')
print(type(return_value), return_value)
# <class 'str'> ok
效果展示
【showwarning】
showwarning(title=None, message=None, **options)
警告提示消息框
【title】弹窗的标题
【message】字符串要显示的信息
【options】其他选项具体见高级操作
【返回值】字符串对象
【提示音】信息提示音
代码示例
import tkinter.messagebox
return_value = tkinter.messagebox.showwarning('严重警告', '如果你还不给我点赞你的电脑将收到病毒攻击')
print(type(return_value), return_value)
# <class 'str'> ok
效果展示
【showerror】
showerror(title=None, message=None, **options)
错误提示消息框
【title】弹窗的标题
【message】字符串要显示的信息
【options】其他选项具体见高级操作
【返回值】字符串对象
【提示音】错误提示音
代码示例
import tkinter.messagebox
return_value = tkinter.messagebox.showerror('系统错误', '系统正在受到未知来源的病毒攻击\n(ERROR_3X007)')
print(type(return_value), return_value)
# <class 'str'> ok
效果展示
【askquestion】
askquestion(title=None, message=None, **options)
一般询问消息框
【title】弹窗的标题
【message】字符串要显示的信息
【options】其他选项具体见高级操作
【返回值】字符串对象
【提示音】无
特别的这个窗口无法点击关闭按钮只能点击“是(Y)”或者“否(N)”
与 askyesno 的区别在于该返回值为 str而 askyesno 为 bool
代码示例
import tkinter.messagebox
return_value = tkinter.messagebox.askquestion('是否点赞', '您要给我点赞是吗')
print(type(return_value), return_value)
# <class 'str'> yes(点击是) no(点击否)
效果展示
【askokcancel】
askokcancel(title=None, message=None, **options)
“确定取消”询问消息框
【title】弹窗的标题
【message】字符串要显示的信息
【options】其他选项具体见高级操作
【返回值】布尔值
【提示音】无
代码示例
import tkinter.messagebox
return_value = tkinter.messagebox.askokcancel('点赞确认', '是否给这篇博客点赞')
print(type(return_value), return_value)
# <class 'bool'> True(点击确定) False(点击取消或关闭)
效果展示
【askyesno】
askyesno(title=None, message=None, **options)
“是否”询问消息框
【title】弹窗的标题
【message】字符串要显示的信息
【options】其他选项具体见高级操作
【返回值】布尔值
【提示音】无
特别的这个窗口无法点击关闭按钮只能点击“是(Y)”或者“否(N)”
代码示例
import tkinter.messagebox
return_value = tkinter.messagebox.askyesno('收藏确认', '是否收藏这篇博客')
print(type(return_value), return_value)
# <class 'bool'> True(点击是) False(点击否)
效果展示
【askyesnocancel】
askyesnocancel(title=None, message=None, **options)
“是否取消”询问消息框
【title】弹窗的标题
【message】字符串要显示的信息
【options】其他选项具体见高级操作
【返回值】布尔值或者 None
【提示音】无
代码示例
import tkinter.messagebox
return_value = tkinter.messagebox.askyesnocancel('支持', '是否点赞并收藏这篇博客')
print(type(return_value), return_value)
# <class 'bool'> True(点击是) False(点击否) None(点击取消或关闭)
效果展示
【askretrycancel】
askretrycancel(title=None, message=None, **options)
“重试取消”询问消息框
【title】弹窗的标题
【message】字符串要显示的信息
【options】其他选项具体见高级操作
【返回值】布尔值
【提示音】信息提示音
代码示例
import tkinter.messagebox
return_value = tkinter.messagebox.askretrycancel('提示', '运气不佳白嫖失败')
print(type(return_value), return_value)
# <class 'bool'> True(点击重试) False(点击取消或关闭)
效果展示
高级操作
高级操作呢一般人是不知道的只有看了子模块 messagebox 源代码的人才知道为什么这么说呢下面我们看看部分源代码就知道了
# tk common message boxes # tk的常见消息框 # this module provides an interface to the native message boxes # available in Tk 4.2 and newer. # 该模块为Tk 4.2及更新版本中可用的本地消息框提供接口 # written by Fredrik Lundh, May 1997 # 作者Fredrik Lundh1997年5月 # # options (all have default values): # 参数都有默认值 # - default: which button to make default (one of the reply codes) # 设置默认值的按钮其中一个回复代码 # - icon: which icon to display (see below) # 要显示的图标见下文 # - message: the message to display # 要显示的消息 # - parent: which window to place the dialog on top of # 将对话框放置在哪个窗口的上面 # - title: dialog title # 对话框标题 # - type: dialog type; that is, which buttons to display (see below) # 对话框类型也就是说要显示哪些按钮见下文 # constants # icons 【用于icon参数】 ERROR = "error" # “错误”图标 INFO = "info" # “信息”图标 QUESTION = "question" # “询问”图标 WARNING = "warning" # “警告”图标 # types 【用于type参数】 ABORTRETRYIGNORE = "abortretryignore" # 中止、重试、忽略 3个按钮的模式 OK = "ok" # 确定 1个按钮的模式 OKCANCEL = "okcancel" # 确定、取消 2个按钮的模式 RETRYCANCEL = "retrycancel" # 重试、取消 2个按钮的模式 YESNO = "yesno" # 是、否 2个按钮的模式 YESNOCANCEL = "yesnocancel" # 是、否、取消 3个按钮的模式 # replies 【用于default参数】 ABORT = "abort" # 默认为“中止”按钮 RETRY = "retry" # 默认为“重试”按钮 IGNORE = "ignore" # 默认为“忽略”按钮 OK = "ok" # 默认为“确定”按钮 CANCEL = "cancel" # 默认为“取消”按钮 YES = "yes" # 默认为“是”按钮 NO = "no" # 默认为“否”按钮
上面这段说明不含中文翻译是子模块 messagebox 的模块文档说明很重要我们发现啊除了我们可以直接看到的 title 参数和 message 参数外其实还有其他参数的只不过它们被用 **options 给代替了导致我们不知道还有什么参数可能是因为一般不用修改这些参数它们只需要采用默认值就行了叭
作者 Fredrik Lundh 在1997年就写出了这么牛逼轰轰的代码膜拜啊 ~ 膜拜啊 ~ orz
代码示例
import tkinter.messagebox
return_value = tkinter.messagebox.askyesnocancel('程序错误', '您可以选择终止程序的运行\n或者重新尝试运行\n或者忽略错误继续运行',
default=tkinter.messagebox.ABORT,
icon=tkinter.messagebox.ERROR,
type=tkinter.messagebox.ABORTRETRYIGNORE)
效果展示
还有其他的大家也可以积极尝试呀
二、colorchooser 子模块
你们知道颜色选择器是什么东东嘛打开 Word 文档随便输入什么东西然后选中输入的文本修改其颜色时可以看到有个“其他颜色”的按钮点一下就会弹出来一个弹窗而这个弹窗就是 Word 的颜色选择器它可以得到 RGB 码中的任意一种颜色
而 tkinter 模块也有一个内置的颜色选择器功能和别的颜色选择器差不多但是样子稍有不同
askcolor(color: str | bytes | None = ...,
*,
initialcolor: _Color = ...,
parent: Misc = ...,
title: str = ...)
【color】同下面的 initialcolor
【initialcolor】初始颜色格式为含有 3 个范围在 0~255 整数的元组
【parent】颜色对话框的父窗口颜色对话框将显示在其上面
【title】对话框的标题
【返回值】一个元组格式: (颜色元组, RGB码)
代码示例
import tkinter.colorchooser
print(tkinter.colorchooser.askcolor())
# (None, None) 点击取消或关闭
# ((0, 0, 0), '#000000') 格式: (颜色元组, RGB码)
效果展示
下面给出一张对比图Word 的颜色选择器
其实他俩差不了多少
三、filedialog 子模块
我们平时打开文件啊、保存文件等都会有一个弹窗弹出来让我们选择打开的文件或保存路径等而这些弹窗就是文件对话框很幸运啊tkinter 模块的 filedialog 子模块早在 1997 年就有了这些接口作者还是上文提到的那个“大牛”让我们来看一看吧
【askopenfilename】
askopenfilename(*,
defaultextension: str | None = ...,
filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
initialdir: StrOrBytesPath | None = ...,
initialfile: StrOrBytesPath | None = ...,
parent: Misc | None = ...,
title: str | None = ...,
typevariable: StringVar | str | None = ...)
文件打开
【defaultextension】默认扩展名如果没有写扩展名
【filetypes】文件类型选项可迭代对象
格式[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])]
【initialdir】初始目录
【initailfile】初始文件名可加扩展名也可不加不加则使用默认扩展名
【parent】父窗口弹窗会显示在父窗口上面也可以空着为默认值则直接弹出
【title】窗口标题
【typevariable】类型变量
【返回值】字符串对象文件路径
代码示例
import tkinter.filedialog
return_value = tkinter.filedialog.askopenfilename(filetypes=[('All Files', '.*')],
title='打开文件',
initialfile='Python.py',
initialdir='C:/Users/小康/Desktop')
print(type(return_value), return_value)
# <class 'str'> C:/Users/小康/Desktop/示例文件.txt (选中 示例文件.txt)
效果展示
【asksaveasfilename】
asksaveasfilename(*,
confirmoverwrite: bool | None = ...,
defaultextension: str | None = ...,
filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
initialdir: StrOrBytesPath | None = ...,
initialfile: StrOrBytesPath | None = ...,
parent: Misc | None = ...,
title: str | None = ...,
typevariable: StringVar | str | None = ...)
文件另存为
【confirmoverwrite】是否覆盖重名原文件默认为True即“已存在”会询问是否覆盖
【defaultextension】默认扩展名如果没有写扩展名
【filetypes】文件类型选项可迭代对象
格式[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])]
【initialdir】初始目录
【initailfile】初始文件名可加扩展名也可不加不加则使用默认扩展名
【parent】父窗口弹窗会显示在父窗口上面也可以空着为默认值则直接弹出
【title】窗口标题
【typevariable】类型变量
【返回值】字符串对象文件路径
代码示例
import tkinter.filedialog
return_value = tkinter.filedialog.asksaveasfilename(filetypes=[('所有文件', ['.py', '.txt'])],
title='另存为文件',
initialdir='C:/Users/小康/Desktop',
defaultextension='.txt')
print(type(return_value), return_value)
# <class 'str'> C:/Users/小康/Desktop/hello.txt (输入 hello)
效果展示
【askopenfilenames】
askopenfilenames(*,
defaultextension: str | None = ...,
filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
initialdir: StrOrBytesPath | None = ...,
initialfile: StrOrBytesPath | None = ...,
parent: Misc | None = ...,
title: str | None = ...,
typevariable: StringVar | str | None = ...)
多个文件打开
【defaultextension】默认扩展名如果没有写扩展名
【filetypes】文件类型选项可迭代对象
格式[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])]
【initialdir】初始目录
【initailfile】初始文件名可加扩展名也可不加不加则使用默认扩展名
【parent】父窗口弹窗会显示在父窗口上面也可以空着为默认值则直接弹出
【title】窗口标题
【typevariable】类型变量
【返回值】字符串对象文件路径
代码示例
import tkinter.filedialog
return_value = tkinter.filedialog.askopenfilenames(filetypes=[('All Files', '.*')],
title='打开文件',
initialfile='Python.py')
print(type(return_value), return_value)
# <class 'tuple'> ('D:/Python 测试/a0.py', 'D:/Python 测试/a1.py', 'D:/Python 测试/a2.py')
效果展示
【askopenfile】
askopenfile(mode: str = ...,
*,
defaultextension: str | None = ...,
filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
initialdir: StrOrBytesPath | None = ...,
initialfile: StrOrBytesPath | None = ...,
parent: Misc | None = ...,
title: str | None = ...,
typevariable: StringVar | str | None = ...)
文件打开
【mode】文件打开模式同 open 函数的 mode 参数
【defaultextension】默认扩展名如果没有写扩展名
【filetypes】文件类型选项可迭代对象
格式[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])]
【initialdir】初始目录
【initailfile】初始文件名可加扩展名也可不加不加则使用默认扩展名
【parent】父窗口弹窗会显示在父窗口上面也可以空着为默认值则直接弹出
【title】窗口标题
【typevariable】类型变量
【返回值】文件 IO 对象
代码示例与效果展示类似于上面的 askopenfilename
【askopenfiles】
askopenfiles(mode: str = ...,
*,
defaultextension: str | None = ...,
filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
initialdir: StrOrBytesPath | None = ...,
initialfile: StrOrBytesPath | None = ...,
parent: Misc | None = ...,
title: str | None = ...,
typevariable: StringVar | str | None = ...)
多个文件打开
【mode】文件打开模式同 open 函数的 mode 参数
【defaultextension】默认扩展名如果没有写扩展名
【filetypes】文件类型选项可迭代对象
格式[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])]
【initialdir】初始目录
【initailfile】初始文件名可加扩展名也可不加不加则使用默认扩展名
【parent】父窗口弹窗会显示在父窗口上面也可以空着为默认值则直接弹出
【title】窗口标题
【typevariable】类型变量
【返回值】元组形式的文件 IO 对象
代码示例与效果展示类似于上面的 askopenfilenames
【asksaveasfile】
asksaveasfile(mode: str = ...,
*,
confirmoverwrite: bool | None = ...,
defaultextension: str | None = ...,
filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
initialdir: StrOrBytesPath | None = ...,
initialfile: StrOrBytesPath | None = ...,
parent: Misc | None = ...,
title: str | None = ...,
typevariable: StringVar | str | None = ...)
文件另存为
【mode】文件打开模式同 open 函数的 mode 参数
【confirmoverwrite】是否覆盖重名原文件默认为True即“已存在”会询问是否覆盖
【defaultextension】默认扩展名如果没有写扩展名
【filetypes】文件类型选项可迭代对象
格式[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])]
【initialdir】初始目录
【initailfile】初始文件名可加扩展名也可不加不加则使用默认扩展名
【parent】父窗口弹窗会显示在父窗口上面也可以空着为默认值则直接弹出
【title】窗口标题
【typevariable】类型变量
【返回值】文件 IO 对象
代码示例与效果展示类似于上面的 asksaveasfilename
【askdirectory】
askdirectory(*,
initialdir: StrOrBytesPath | None = ...,
mustexist: bool | None = ...,
parent: Misc | None = ...,
title: str | None = ...)
选择文件夹
【initialdir】初始目录
【mustexist】是否必须为现有目录
【parent】父窗口弹窗会显示在父窗口上面也可以空着为默认值则直接弹出
【title】窗口标题
【返回值】字符串对象文件夹路径
代码示例
import tkinter.filedialog
return_value = tkinter.filedialog.askdirectory()
print(type(return_value), return_value)
# <class 'str'> C:/Users/小康/Desktop
效果展示
>>>【 下节内容更新中 ... ... 】<<<