当前位置: 首页 > news >正文

Python Tkinter 教程(四)—— 子模块 messagebox、colorchooser 以及 filedialog 的使用及技巧(万字详解)

>>>【 上节回顾:三种几何布局管理器Pack、Place和Grid的详细用法 】<<<

Python Tkinter教程(四)

        这篇博客将详细介绍 tkinter 模块的子模块,如消息框子模块(messagebox)、颜色选择器子模块(colorchooser)以及文件对话框子模块(filedialog)

目录

一、messagebox 子模块

一般用法

【showinfo】

【showwarning】

【showerror】

【askquestion】

【askokcancel】

【askyesno】

【askyesnocancel】

【askretrycancel】

高级操作

二、colorchooser 子模块

代码示例

效果展示

三、filedialog 子模块

【askopenfilename】

【asksaveasfilename】

【askopenfilenames】

【askopenfile】

【askopenfiles】

【asksaveasfile】

【askdirectory】


一、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

效果展示

showinfo

【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

效果展示

showwarning

【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

效果展示

showerror

【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(点击否)

效果展示

askquestion

【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(点击取消或关闭)

效果展示

askokcancel

【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(点击否)

效果展示

askyesno

【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(点击取消或关闭)

效果展示

askyesnocancel

【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(点击取消或关闭)

效果展示

askretrycancel

高级操作

        高级操作呢,一般人是不知道的,只有看了子模块 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 Lundh,1997年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码)

效果展示

colorchooser

下面给出一张对比图(Word 的颜色选择器)

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)

效果展示

askopenfilename

【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)

效果展示

asksaveasfilename

【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')

效果展示

askopenfilenames

【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

效果展示

askdirectory

>>>【 下节内容:更新中 ... ... 】<<< 

相关文章:

  • C++画图 => 蓝桥杯青少组C++ => 信奥 学习路线图
  • 微信公众号的附件链接怎么弄
  • 概率论与梳理统计学习:随机变量(二)——知识总结与C语言案例实现
  • python学习—第一步—Python小白逆袭大神(第二天)
  • SAP ABAP ALV 的一些总结:Custom container 和 Splitter container
  • 由从零开始的神经网络理解torch的几个模块
  • R语言进行数据分组聚合统计变换(Aggregating transforms)、计算dataframe数据的分组独特值的个数(distinct)
  • Linux入门之使用 ifconfig 命令配置网络连接
  • Day 1 BUUCTF——特殊的 BASE64 1
  • 大数据分析案例-用RFM模型对客户价值分析(聚类)
  • Linux入门之管理 Wi-Fi 连接
  • 结构体作业等
  • ARM架构种类
  • 【牛客刷题-算法】NC16 对称的二叉树
  • MATLAB算法实战应用案例精讲-【回归算法】XGBoost算法(附Java、Python和R语言代码)
  • [LeetCode] Wiggle Sort
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Kibana配置logstash,报表一体化
  • leetcode388. Longest Absolute File Path
  • vue 配置sass、scss全局变量
  • vue-loader 源码解析系列之 selector
  • 初识MongoDB分片
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 前端面试之CSS3新特性
  • 使用agvtool更改app version/build
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 《天龙八部3D》Unity技术方案揭秘
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • "无招胜有招"nbsp;史上最全的互…
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • ()、[]、{}、(())、[[]]命令替换
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (蓝桥杯每日一题)love
  • (生成器)yield与(迭代器)generator
  • (转)项目管理杂谈-我所期望的新人
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET CLR基本术语
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET gRPC 和RESTful简单对比
  • .net Stream篇(六)
  • .net 提取注释生成API文档 帮助文档
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET轻量级ORM组件Dapper葵花宝典
  • @Bean注解详解
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [android] 练习PopupWindow实现对话框
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
  • [bzoj2957]楼房重建
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [CISCN2019 华东北赛区]Web2
  • [CSS]CSS 的背景
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [Docker]五.Docker中Dockerfile详解