欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Python Tkinter 模块简要介绍 有大用 有大大用 有大大大用

Python Tkinter 模块简要介绍


本文章已于 2022/9/26 重制

 

        这篇博客将简要地介绍 Python 的 Tkinter 模块,主要供没了解过 Tkinter 模块的人进行了解,让初学者也能进行桌面应用开发!下面的链接教程也是我自己写的保证质量,绝对优质,人格担保!),希望对大家有帮助!Python Tkinter 桌面应用开发完整教程专栏https://blog.csdn.net/weixin_62651706/category_11600888.html

Python桌面应用程序开发·知士荟 (learnerhub.net)icon-default.png?t=N3I4https://www.learnerhub.net/#/spaces/2702 

        Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中

        Python 使用 Tkinter 可以快速的创建 GUI 应用程序。

        由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。

——摘编自Python GUI 编程(Tkinter) | 菜鸟教程

        在编程软件(我用的是 VScode)中,按住 Ctrl 键的同时点击我们程序文本中的 tkinter 字样,可以跳转到 tkinter 模块的 __init__.py 文件,让我们来看看那里面是怎么说的

Tkinter provides classes which allow the display, positioning and control of widgets. Toplevel widgets are Tk and Toplevel. Other widgets are Frame, Label, Entry, Text, Canvas, Button, Radiobutton,Checkbutton, Scale, Listbox, Scrollbar, OptionMenu, Spinbox, LabelFrame and PanedWindow.

Properties of the widgets are specified with keyword arguments.Keyword arguments have the same name as the corresponding resource under Tk.

Widgets are positioned with one of the geometry managers Place, Pack or Grid. These managers can be called with methods place, pack, grid available in every Widget.

Actions are bound to events by resources (e.g. keyword argument command) or with the method bind.

【以下是百度翻译的结果】

        Tkinter提供了允许显示、定位和控制控件的类。Toplevel 控件是 Tk 和 Toplevel其他控件包括框架标签输入文本画布按钮单选按钮复选按钮范围列表框滚动条选项菜单SpinboxLabelFrame 和 PanedWindow

        控件的属性由关键字参数指定。关键字参数与Tk下的相应资源具有相同的名称。

        控件通过一个几何管理器 Place、Pack 或 Grid 进行定位。这些管理器可以通过每个控件中可用的方法 placepack 和 grid 进行调用。

        操作通过资源(例如:关键字参数命令)或方法绑定到事件。

 一、Tkinter Widget【Tkinter 控件】

Tkinter模块提供了2种 Toplevel 控件和许多基本控件,目前已包括15种,每种控件都有很多属性

Toplevel控件控件名称描述详细说明
Tk容器控件提供一个对话框作为主窗口

 链接

Toplevel容器控件提供一个单独的对话框作为子窗口(弹出新窗口)

 链接

基本控件控件名称描述详细说明
Frame框架控件显示一个区域,作为其他基本控件的容器链接
Label标签控件显示文本和位图链接
Entry输入控件可以输入并显示文本更新中
Text文本控件显示多行文本更新中
Canvas画布控件显示图片、图形(如线条)或文本更新中
Button按钮控件显示一个带有功能的按钮链接
Radiobutton单选按钮控件显示一个带有功能的单选按钮更新中
Checkbutton复选按钮控件显示一个带有功能的多选按钮更新中
Scale范围控件显示一个数值刻度,为输出限定范围的数字区间更新中
Listbox列表框控件显示一个字符串列表更新中
Scrollbar滚动条控件当内容超过可视化区域时使用,如列表框更新中
OptionMenu选项菜单控件显示一个位于窗口顶部的菜单栏更新中
Spinbox输入控件与Entry输入控件类似,但是可以指定输入范围值更新中
LabelFrame容器控件简单的容器控件,常用与复杂的窗口布局更新中
PanedWindow窗口布局管理插件可以包含一个或者多个子控件更新中

二、Geometry Managers【几何管理器】

 Tkinter 模块提供了3中几何管理方法,包括 PackGrid 和 Place

几何管理方法名称描述详细说明
pack布局比较简单,但不够精确,一般用于简单的GUI编程链接
grid网格一般用于网格较多的GUI编程链接
place位置可以精确地放置控件,但需要控件在对话框或其他容器中的坐标链接

三、Tkinter 模块的子模块

实际上,Tkinter 模块不仅仅可以用其主库来开发,它的一些子模块也是相当不错的!但是注意!下面的有些子模块在 Tkinter 的高版本中才有!

子模块描述详细说明
tkinter.messagebox提供多种标准对话框链接
tkinter.colorchooser提供颜色选择器对话框链接
tkinter.filedialog提供文件打开或保存等对话框链接
tkinter.ttk提供系统外观的控件,同时增加一些扩展控件更新中
tkinter.dnd提供控件拖拽操作更新中
tkinter.tix提供巨量扩展控件,几乎将现代的控件种类全部补充更新中

四、实战举例

这里我列举几个我用 Python Tkinter 模块编写的简单程序(就是上面链接教程里的实战

示例一 【登录界面】

image.png

示例二【计算器】

image.png

示例三【五子棋】

image.png

image.png

 示例四【中国象棋】

image.png

image.png

image.png

>>>【下节内容:tkinter编程基本步骤、窗口基本属性及Toplevel控件的使用<<<

文章已被收录至官方知识档案

Python入门技能树桌面应用开发Tkinter336120 人正在系统学习中


来自  https://blog.csdn.net/weixin_62651706/article/details/122813713?spm=1001.2014.3001.5501



Python Tkinter教程(一)——tkinter编程基本步骤、窗口基本属性及Toplevel控件的使用


           

 >>>【上节回顾:Python Tkinter 模块简要介绍<<<

       Python Tkinter教程(一)

         这篇博客将详细地介绍如何使用tkinter模块进行简单的GUI编程(包括基本步骤、窗口基本属性),同时还会解释如何使用Toplevel控件。


一、Toplevel控件

tkinter模块中的控件有两大类,一类是基本控件,包含15个基本控件,另一类是Toplevel控件,包含两个容器控件

Toplevel控件描述关联
Tk创建主窗口并弹出主窗口对话框,必须有一个也只能有一个

主窗口关闭,则主窗口和所有子窗口都会关闭;

子窗口关闭,则仅该子窗口关闭,不影响主窗口和其他子窗口。

Toplevel创建子窗口并弹出新的对话框,可有可无

二、tkinter简单的GUI编程

1、基本步骤

用Python的Tkinter模块创建一个基本的GUI程序的步骤包括:

  1. 导入tkinter模块【必要步骤】

  2. 创建主窗口【必要步骤】

  3. 创建控件

  4. 指定这个控件的master,即这个控件属于哪一个

  5. 主窗口进入消息事件循环【必要步骤】

简单示例

【源代码】

  1. from tkinter import *#导入tkinter模块【必要步骤】
  2. root = Tk()#创建主窗口【必要步骤】
  3. #将该窗口赋值给root变量,方便后续使用
  4. root.mainloop()#主窗口进入消息事件循环【必要步骤】

【运行效果】

image.png

【代码解释】

        在tkinter模块中,我们用Tk()函数(T要大写)去创建一个主窗口,用mainloop()方法使主窗口进入消息事件循环,这很重要,如果没有使主窗口进入消息事件循环,那么主窗口就只会在屏幕上闪一下就消失了,或者闪都没有闪一下,根本没有出现。

        mainloop()方法的位置一定是放在最后,你可以把它理解成一个巨大的循环,使主窗口显示这个程序一直执行(所以主窗口一直显示在屏幕上),类似于循环。

        实际上Tk是一个tkinter的控件,但它不属于基本控件,而是属于Toplevel控件中的一种容器控件,tkinter模块的Toplevel控件中有两种容器控件,一个是产生主窗口的Tk容器控件,另一种是产生子窗口的Toplevel控件(名字雷同,但不是同一个东西)

【控件详细分类见:Python Tkinter 模块简要介绍_小康2021的博客-CSDN博客

2、窗口基本属性

窗口的属性有很多,大部分适用于两种窗口控件(见【一、Toplevel控件】)下面简单地列个表

窗口属性描述适用于
title()设置窗口标题主窗口Tk、子窗口Toplevel
geometry()设置窗口初始大小和位置主窗口Tk、子窗口Toplevel
resizable()设置窗口的宽和高是否可以改变主窗口Tk、子窗口Toplevel
overrideredirect()设置是否去除窗口边框主窗口Tk、子窗口Toplevel
iconbitmap()设置窗口图标主窗口Tk、子窗口Toplevel
minsize()设置窗口最小缩放的宽和高主窗口Tk、子窗口Toplevel
maxsize()设置窗口最大缩放的宽和高主窗口Tk、子窗口Toplevel
state()设置窗口启动时的状态主窗口Tk、子窗口Toplevel
mainloop()窗口进入消息事件循环主窗口Tk

wm_attributes()

设置WM属性(也可以写为attributes()主窗口Tk、子窗口Toplevel
winfo_x()返回窗口左侧与屏幕左侧之间的距离主窗口Tk、子窗口Toplevel
winfo_y()返回窗口上侧与屏幕上侧之间的距离主窗口Tk、子窗口Toplevel
transient()设置为主窗口的临时窗口子窗口Toplevel
quit()退出主窗口主窗口Tk
destroy()摧毁(退出)控件所有控件

现在开始详细地解释:

窗口属性参数及用法
title(string)string是字符串,窗口的名字,默认为'tk'
geometry('WxH+dx+dy')W和H是窗口的初始宽和高,‘x’代表乘号(不可替换为‘*’)dx和dy代表窗口弹出时窗口左侧和上侧与屏幕左侧和上侧之间的距离(单位:像素)
resizable(bool,bool)两个布尔值分别代表窗口的长和宽是否可改变(可以用0和1代替布尔值)
overrideredirect(bool)布尔值代表是否去除窗口边框(可以用0和1代替布尔值)
iconbitmap('path')path代表图标文件的路径
minsize(width,height)参数分别代表窗口最小缩放的宽和高
maxsize(width,height)参数分别代表窗口最大缩放的宽和高
state(arg)

arg是一个字符串,可以是

'normal'(正常)

'withdrawn'(启动时窗口隐藏)

'iconic'(启动时窗口最小化)

'zoomed'(启动时窗口最大化)

mainloop(integer)integer是整数,为非正数时使主窗口进入消息事件循环,默认为非正数

wm_attributes(args)

或 attributes(args)

wm_attributes("-alpha",double)设置窗口透明度为double(0完全透明~1不透明)

wm_attributes("-toolwindow",bool)设置窗口是否为工具窗口(无最大最小化按钮)

wm_attributes("-topmost",bool)设置窗口是否置顶

wm_attributes("-fullscreen",bool)设置窗口是否全屏

wm_attributes("-disabled",bool)设置窗口是否为不可用状态(所有控件不可用)

wm_attributes("-transparentcolor",color)指定顶层窗口的穿透颜色,接收tk_getcolor中定义的颜色

winfo_x()没有参数,返回窗口左侧与屏幕左侧之间的距离(单位:像素)
winfo_y()没有参数,返回窗口上侧与屏幕上侧之间的距离(单位:像素)
transient(master)master是主窗口,该子窗口会随主窗口最小化而最小化,关闭而关闭,总在最前面
quit()没有参数,退出主窗口,等同于按下退出按钮,所有子窗口也退出
destroy()

没有参数,摧毁主窗口,主窗口消失,且所有子窗口也消失

摧毁子窗口,则只有该子窗口消失,不影响主窗口和其他子窗口

图例说明

【设置为工具窗口】

image.png  
没有最大化和最小化按钮  

 【窗口大小不可改变】

image.png  
最大化窗口变成灰色不可点的状态  

 【去除窗口边框】

image.png  
窗口顶部消失  

【默认窗口图标】 

image.png  
窗口默认的图标是一片羽毛  

简单示例

【源代码】

  1. from tkinter import *#导入tkinter模块
  2. root = Tk()#创建主窗口
  3. root.title('主窗口')#设置标题
  4. root.geometry('960x480+150+100')#设置窗口大小及位置
  5. root.wm_attributes('-alpha',0.7)#设置透明度为0.7
  6. root.resizable(0,0)#窗口大小不可更改
  7. toplevel = Toplevel(root)#创建子窗口
  8. toplevel.title('子窗口')#设置标题
  9. root.mainloop()#主窗口进入消息事件循环

【运行效果】

image.png


>>>【下节内容:Label控件、Frame控件、Button控件的完整详细用法<<<

文章知识点与官方知识档案匹配,可进一步学习相关知识

Python入门技能树桌面应用开发Tkinter336106 人正在系统学习中


来自  https://blog.csdn.net/weixin_62651706/article/details/122815819?spm=1001.2014.3001.5502



Python Tkinter教程(二)——Label控件、Frame控件、Button控件的完整参数和所有方法及详细用法


 

>>>【上节回顾:tkinter编程基本步骤、窗口基本属性及Toplevel控件的使用<<<

Python Tkinter教程(二)

        这篇博客将详细并尽可能完整地介绍tkinter模块15种基本控件中的Label控件、Frame控件和Button控件,包括所有的参数和方法,通过示例代码和图片的方式进行详细地教程。

目录

一、Label控件

【参数说明】

【方法说明】

 二、Frame控件

【参数说明】

【方法说明】

三、Button控件 

【参数说明】

【方法说明】


一、Label控件

【Label控件官方原文:label manual page - Tk Built-In Commands

label控件就是标签控件,最基本的控件之一,可以用来显示文本和位图

w = Label(parent, option, ...)

parent是父控件,option是一些参数

【参数说明】

image.png

标准参数描述
activebackground控件为活动状态时的背景色【活动状态定义见下】
activeforeground控件为活动状态时的前景色
anchor

如果控件的空间大于文本所需的空间,此参数可控制文本的位置,默认值为'center',可选项有'e''s''w''n''nw''ne''sw''se''center'

分别代表右、下、左、上、左上、右上、左下、右下、中间(类似于东南西北)

background可简写为'bg',设置标签的背景颜色,可以是颜色字符串,也可以是RGB码
bitmap将此参数设置为位图或图像对象,标签控件将显示该图形
borderwidth可简写为'bd',设置标签的边框宽度(单位:像素)
compound指定控件是否应同时显示文本和位图/图像,如果是,位图/图像应放置在相对于文本的位置,可选项有'none','bottom','top','left','center','right'
cursor当鼠标悬停在该标签上时出现的鼠标样式,具体类别可见:【5.8. Cursors
disabledforeground当控件状态是disabled的时候显示的前景颜色
font设置字体及文字大小,可以是font='宋体',或者font=('宋体',15)两种格式
foreground可简写为'fg',设置标签的前景颜色,可以是颜色字符串,也可以是RGB码
highlightbackground指定控件没有获取焦点时高亮区域中显示的颜色
highlightcolor指定当控件具有焦点时,在控件周围高亮矩形的颜色
highlightthickness一个非负值,当具有焦点时围绕控件外部的高亮矩形的宽度(单位:像素)
image设置标签控件要显示的图片
justify指定多行文字之间的对齐方式,可选项有'left','center','right'
padx在控件内文本的左右两侧添加了额外的空间,默认值为1
pady在控件内文本的上方和下方添加额外的空间,默认值为1
relief

指定标签周围装饰边框的外观,默认值是'flat'

可选项有'flat','raised','sunken','groove','ridge'

takefocus通常情况下,焦点不会访问标签控件,如果希望焦点访问此控件,则设置为1
text指定显示在控件内的文本
textvariable指定一个变量名,其值将用于设置text属性
underline设置文本字符串中带下划线字符的索引(基于0)
wraplength为控件指定的最大行长度选项,将超过此长度的行换行到下一行,如果此值小于或等于0,则不进行换行
控件特定参数描述
height设置标签的高度(单位:不是像素!而是字符数)
state可以设为'normal''disabled',以便控制‘禁用’状态标志位
width设置标签的宽度(单位:不是像素!而是字符数)

活动状态】如果鼠标光标位于控件上,并且按下鼠标左键导致某些操作发生,则控件或控件的一部分将处于活动状态。Windows系统下仅当鼠标左键按在控件上时才处于活动状态。

【博主认为(可能有误):活动状态貌似仅对于某些控件(如Button)有效】

relief参数

image.png

【方法说明】

方法名描述
.cget()返回由参数给定的配置参数(以字符串形式)的当前值
.configure()可简写为'.config()',查询或修改控件的配置参数

【示例代码】

  1. from tkinter import *#导入tkinter模块
  2. root = Tk()#创建主窗口
  3. root.title('一个窗口')#设置窗口标题
  4. root.geometry('300x200+200+200')#设置窗口大小及位置
  5. #创建一个标签控件并赋值给label变量
  6. label = Label(root,text='这是一个标签',bg='grey',fg='#F0F0F0',font=('华文新魏',15),bd=5,relief='groove')
  7. label.pack()#放置标签控件
  8. root.mainloop()#主窗口进入消息事件循环

【运行效果】

image.png

 【特别说明】

这里我们先不去讨论控件的放置问题(这里用的几何管理方法是Pack)后面我们再对控件的放置进行讨论,这里特别要说明的是,任何一个基本控件的第一个参数一定是它的父控件,在上面的代码中Label控件的父控件是Toplevel控件中的一种容器控件,即root。关于Toplevel控件容器控件的说明见:Python Tkinter教程(一)——tkinter编程基本步骤、窗口基本属性及Toplevel控件的使用

 二、Frame控件

【Frame控件官方原文:frame manual page - Tk Built-In Commands

Frame控件就是框架控件,一种基本容器控件,可以充当其他基本控件的父控件

w = Frame(parent, option, ...)

parent是父控件,option是一些参数

【参数说明】

image.png

标准参数描述
borderwidth可简写为'bd',设置框架的边框宽度(单位:像素)
cursor

 当鼠标悬停在该框架内时出现的鼠标样式,具体类别可见:【5.8. Cursors

highlightbackground指定控件没有获取焦点时高亮区域中显示的颜色
highlightcolor指定当控件具有焦点时,在控件周围绘制的高亮矩形的颜色
highlightthickness一个非负值,当具有焦点时围绕控件外部的高亮矩形的宽度(单位:像素)
padx通常情况下框架紧紧包裹着里面的东西,添加框架内水平空间的像素
pady添加框架内垂直空间的像素
relief

指定框架周围装饰边框的外观,默认值是'flat'

可选项有'flat','raised','sunken','groove','ridge'

takefocus通常情况下,焦点不会访问框架控件,如果希望焦点访问此控件,则设置为1
控件特定参数描述
background可简写为'bg',设置框架的背景颜色,可以是颜色字符串,也可以是RGB码
class指定窗口的类,这个类将在查询选项数据库以获取窗口的其他选项时使用,以后也将用于其他目的,如绑定【此参数不可用configure widget命令】
colormap指定要用于窗口的颜色贴图【此参数不可用configure widget命令】
container该值必须是布尔值,具体说明比较复杂,见【Frame控件官方原文
height设置框架的高度(单位:像素)
visual在接受的任何窗体中指定新窗口的可视信息【此参数不可用configure widget命令】
width设置框架的宽度(单位:像素)

【方法说明】

方法名描述
.cget()返回由参数给定的配置参数(以字符串形式)的当前值
.configure()可简写为'.config()',查询或修改控件的配置参数

【示例代码】

  1. from tkinter import *#导入tkinter模块
  2. root = Tk()#创建主窗口
  3. root.title('一个窗口')#设置窗口标题
  4. root.geometry('300x200+200+200')#设置窗口大小及位置
  5. frame = Frame(root,bg='lightgreen')#创建一个框架
  6. frame.place(width=200,height=100,x=50,y=50)#放置框架
  7. #这一步骤很关键,不可以直接写成“frame = Frame(root,bg='lightgreen',height=100,width=200).place(width=200,height=100,x=50,y=50)”,不然会报错!
  8. #创建一个标签控件并赋值给label变量
  9. Label(frame,text='这是一个标签',bg='grey',fg='#F0F0F0',font=('华文新魏',15),bd=5,relief='groove').pack()#为了简化代码,这里就直接放置标签控件
  10. root.mainloop()#主窗口进入消息事件循环

【运行效果】

image.png

【特别说明】 

这里用了两种几何布局管理器(Place和Pack)我们暂且先不管, 这里我们要注意一个非常非常重要而且易错的地方!上面创建Label控件的时候没有把控件赋值给一个变量,而是直接把它的布局写在了后面(.pack()写在后面),在其他代码没有涉及到这个控件时这样做是没有问题的,但是对于上面的Frame控件就不行!因为Label控件的父控件是Frame控件!

创建Frame控件并赋值给frame变量,此时frame代表的是一个Frame控件。但是!如果直接写成下面这样的错误写法:

frame = Frame(root,bg='lightgreen',height=100,width=200).place(width=200,height=100,x=50,y=50)

即,把几何布局一起写在了后面,这样做那么此时frame变量代表的值不是一个Frame控件,而是None!有图有真相,请看下面:

image.png  
正确做法  
image.png  
错误做法  

 有时候简化代码可以,有时候不行,会犯错,平时我们要多多注意!

三、Button控件 

【Button控件官方原文:button manual page - Tk Built-In Commands】 

Button控件就是我们最喜欢的按钮控件,点击它可以执行相关的函数

w = Button(parent, option, ...)

 parent是父控件,option是一些参数

【参数说明】

image.png

标准参数描述
activebackground控件为活动状态时的背景色【活动状态定义见Label控件说明】
activeforeground控件为活动状态时的前景色
anchor

如果控件的空间大于文本所需的空间,此参数可控制文本的位置,默认值为'center',可选项有'e''s''w''n''nw''ne''sw''se''center'

分别代表右、下、左、上、左上、右上、左下、右下、中间(类似于东南西北)

background可简写为'bg',设置按钮的背景颜色,可以是颜色字符串,也可以是RGB码
bitmap将此参数设置为位图或图像对象,按钮控件将显示该图形
borderwidth可简写为'bd',设置按钮的边框宽度(单位:像素)
cursor

当鼠标悬停在按钮上时出现的鼠标样式,具体类别可见:【5.8. Cursors

disabledforeground当控件状态是disabled的时候显示的前景颜色
font设置字体及文字大小,可以是font='宋体',或者font=('宋体',15)两种格式
foreground可简写为'fg',设置按钮的前景颜色,可以是颜色字符串,也可以是RGB码
highlightbackground指定控件没有获取焦点时高亮区域中显示的颜色
highlightcolor指定当控件具有焦点时,在控件周围高亮矩形的颜色
highlightthickness一个非负值,当具有焦点时围绕控件外部的高亮矩形的宽度(单位:像素)
image设置按钮控件要显示的图片
justify指定多行文字之间的对齐方式,可选项有'left','center','right'
padx在控件内文本的左右两侧添加了额外的空间,默认值为1
pady在控件内文本的上方和下方添加额外的空间,默认值为1
relief

指定按钮周围装饰边框的外观,默认值是'raised'

可选项有'flat','raised','sunken','groove','ridge'

repeatdelay见下方repeatinterval描述
repeatinterval

通常,当用户释放鼠标按钮时,按钮只会触发一次,如果您希望只要按住鼠标键,按钮就会以固定的间隔激发,请将此参数设置为重复之间使用的毫秒数,并设置repeatdelay在开始重复之前要等待的毫秒数

例如,如果指定repeatdelay=500,repeatinterval=100,按钮将在半秒后启动,此后每隔十分之一秒启动一次,直到用户释放鼠标按钮;如果用户至少没有按住鼠标键repeatdelay毫秒,按钮将正常启动

takefocus通常情况下,键盘焦点会访问按钮控件,如果希望焦点不访问此控件,则设置为0
text指定显示在控件内的文本
textvariable指定一个变量名,其值将用于设置text属性
underline设置文本字符串中带下划线字符的索引(基于0)
wraplength为控件指定的最大行长度选项,将超过此长度的行换行到下一行,如果此值小于或等于0,则不进行换行
控件特定参数描述
command指定一个要与按钮关联的函数,在鼠标左键按下并释放后执行该函数
compound指定控件是否应同时显示文本和位图/图像,如果是,位图/图像应放置在相对于文本的位置,可选项有'none','bottom','top','left','center','right'
default指定按钮默认的状态,可选项有'normal','active','disabled'
height指定按钮高度,单位为字符(显示文字)或者像素(显示图片)
overrelief指定按钮的替代样式,当鼠标光标位于控件上时显示
state

指定按钮状态,可选项有'normal','active','disabled'

正常状态下,使用'foreground''background'参数显示前景色和背景色

活动状态下,使用'activeforeground''activebackground'参数显示前景色和背景色

禁用状态下,使用'disabledforeground''background'参数显示前景色和背景色

width指定按钮宽度,单位为字符(显示文字)或者像素(显示图片)

【方法说明】

方法名描述
.cget()返回由参数给定的配置参数(以字符串形式)的当前值
.configure()可简写为'.config()',查询或修改控件的配置参数
.flash()使按钮在活动颜色和正常颜色之间闪烁几次,如果按钮被禁用,则忽略
.invoke()调用按钮的command参数关联函数的回调,并返回该函数返回的值,如果按钮被禁用或没有回调,则无效

【示例代码】

  1. from tkinter import *#导入tkinter模块
  2. root = Tk()#创建主窗口
  3. root.title('一个窗口')#设置窗口标题
  4. root.geometry('300x200+200+200')#设置窗口大小及位置
  5. b = Button(root,relief='flat',activebackground='orange',bg='lightgreen',overrelief='raised',text='Click',command=lambda:print(b.cget('relief')))#创建按钮
  6. b.place(width=100,height=30,x=100,y=100)#放置按钮
  7. root.mainloop()#主窗口进入消息事件循环

【运行效果】

image.pngimage.pngimage.png

这3幅效果图分别是【鼠标光标未经过按钮】【鼠标光标悬停在按钮上】【按下按钮但不释放】

image.png  
按下按钮后执行command命令的效果  

>>> 下节内容:Pack方法、Place方法和Grid方法的详细教程 】<<<

文章知识点与官方知识档案匹配,可进一步学习相关知识
 

Python Tkinter教程(三)——三种几何布局管理器Pack、Place和Grid的所有参数及相关方法及详细用法

>>>【 上节回顾:Label控件、Frame控件、Button控件的完整参数及详细用法 】<<<

Python Tkinter教程(三)

        这篇博客将详细并尽可能完整地介绍tkinter模块的3种几何布局管理器Pack、Place和Grid的所有参数及相关方法及详细使用方法,通过示例代码和图片的方式进行详细地教程。

目录

一、Pack方法

【参数说明】

【相关方法】

二、Place方法

【参数说明】 

【相关方法】

三、Grid方法

【参数说明】 

【相关方法】

【总结一下】


一、Pack方法

【Pack方法官方原文:pack manual page - Tk Built-In Commands

【参数说明】

image.png

参数描述
after参数为另一个控件,在pack布局另外的那个控件之后再布局该控件
anchor用于确定控件被放置相对于父控件的位置,可选项有'e','s','w','n','sw','se','nw','ne','center',默认为'center'
before参数为另一个控件,在pack布局另外的那个控件之前先布局该控件
expand

指定控件在容器中是否可以扩展,可以是布尔值,可以是0,1或者'no',默认为0【1

fill

用于拉伸控件,可选的style有'none'(默认值,没有拉伸)

'x'(横向拉伸)、'y'(纵向拉伸)和'both'(双向拉伸)

【注:相关选项也可写为大写,如X或Y,此时不是字符串!

side

指定将控件放置相对于父控件在哪一边,可选项是'left'(左)、'right'(右)

'top'(上)和'bottom'(下),默认为'top'

【注:相关选项也可写为大写,如LEFT,此时不是字符串!

ipadx水平的两个方向,控件内部额外添加空间,长度单位为像素
ipady竖直的两个方向,控件内部额外添加空间,长度单位为像素
padx水平的两个方向,控件外部额外添加空间,长度单位为像素
pady竖直的两个方向,控件外部额外添加空间,长度单位为像素
in_指定pack于哪一个父控件,默认为当前父控件

1】如果容器窗口太大,以至于在其所有内容pack后会留下额外的空间,那么额外的空间将均匀分布在为其设置了-expand选项的所有内容中。

【相关方法】

方法名描述
pack_configure和pack一样
pack_forget使控件不再被Pack几何布局管理器管理控件并不是被删除了!依然占用内存!
pack_info返回一个字典,键值分别为当前控件的参数的字符串形式及值
pack_propagate参数如果为真布尔值,如1或on,则为容器控件启用传播(见下几何传播),容器控件必须是窗口名。如果为假布尔值,则禁用容器控件的传播。在这两种情况下,都会返回一个空字符串。如果省略布尔值,则命令返回0或1,以指示当前是否为容器控件启用传播。默认情况下,将启用传播。
pack_slaves

返回一个列表,列表内容为该控件中所有用pack布局的子控件(按pack布局的顺序

一般容器控件才用该方法

pack_content旧版Tkinter中,和pack_slaves()功能相同【新版中貌似已经删去此方法】

几何传播Pack通常会计算一个容器控件(如Frame控件)必须有多大才能完全满足其内容物的需要,并将容器控件的宽度和高度设置为这些尺寸。这会导致几何信息通过窗口层次向上传播到顶层窗口(Toplevel类型的控件),以便整个子树自行调整大小以满足叶窗口的需要。但是,pack_propagate命令可用于关闭一个或多个容器控件的传播。如果传播被禁用,则Pack几何布局管理器将不会设置pack所需的宽度和高度。例如,如果希望容器控件具有指定的固定大小,这可能很有用。

这里推荐一篇写的很好的关于Pack的文章

用tkinter.pack设计复杂界面布局_快乐清风客的博客-CSDN博客_tkinter界面设计

【代码示例】

  1. from tkinter import *
  2. root = Tk()
  3. root.title('Pack方法')
  4. root.geometry('600x600+300+100')
  5. Frame(root,bg='red',width=100).pack(side='left',fill='y',expand='no')
  6. Frame(root,bg='yellow',height=100).pack(side='top',fill='x')
  7. Frame(root,bg='green').pack(expand=1,fill='both')
  8. root.mainloop()

【运行效果】

image.png

二、Place方法

【Place方法官方原文:place manual page - Built-In Commands

【参数说明】 

image.png

参数描述
anchor

改变place布局控件的基准点,默认为'nw'(左上角)

修改后其x参数和y参数的基准点随之改变

bordermode可选参数有'inside','outside''ignore'默认为'inside'【1
in_同上Pack
relwidth

设置控件宽度,参数为0~1.0,意为宽度占父控件宽度的比例

若父控件宽度为100,relwidth=0.5,则该控件宽度为100×0.5=50(像素)

与参数width冲突,两者会叠加

relheight

设置控件高度,参数为0~1.0,意为高度占父控件高度的比例

若父控件高度为100,relheight=0.5,则该控件高度为100×0.5=50(像素)

与参数height冲突,两者会叠加

relx

设置控件基准点(左上角)横坐标位置,参数为0~1.0,意为横坐标占父控件宽度的比例

若父控件宽度为100,relx=0.5,则该控件基准点横坐标为100×0.5=50(像素)

与参数x冲突,两者会叠加

rely

设置控件基准点(左上角)纵坐标位置,参数为0~1.0,意为纵坐标占父控件高度的比例

若父控件高度为100,rely=0.5,则该控件基准点纵坐标为100×0.5=50(像素)

与参数y冲突,两者会叠加

width设定控件的宽度(单位:像素
height设定控件的高度(单位:像素
x设定控件基准点(左上角)的横坐标位置(单位:像素)
y设定控件基准点(左上角)的纵坐标位置(单位:像素)

1】该参数不常用,要参考的可以看一下官方说明:

(我就不翻译了,嘻嘻,主要是没看太懂,有懂的可以在评论区说一下哦!)

-bordermode mode

whether to take border width of master widget into account

Mode determines the degree to which borders within the container are used in determining the placement of the content. The default and most common value is inside. In this case the placer considers the area of the container to be the innermost area of the container, inside any border: an option of -x 0 corresponds to an x-coordinate just inside the border and an option of -relwidth 1.0 means window will fill the area inside the container's border.

If mode is outside then the placer considers the area of the container to include its border; this mode is typically used when placing window outside its container, as with the options -x 0 -y 0 -anchor ne. Lastly, mode may be specified as ignore, in which case borders are ignored: the area of the container is considered to be its official X area, which includes any internal border but no external border. A bordermode of ignore is probably not very useful.

【相关方法】

方法名描述
place_configure同上pack
place_forget同上pack
place_info同上pack
place_slaves同上pack
place_content同上pack

【代码示例】

  1. from tkinter import *
  2. root = Tk()
  3. root.title('Place方法')
  4. root.geometry('600x600+300+100')
  5. Frame(root,bg='red').place(width=450,height=150)
  6. Frame(root,bg='yellow').place(width=150,height=450,x=450)
  7. Frame(root,bg='blue').place(width=450,height=150,x=150,y=450)
  8. Frame(root,bg='green').place(width=150,height=450,y=150)
  9. root.mainloop()

【运行效果】

image.png

三、Grid方法

【Grid方法官方原文:grid manual page - Tk Built-In Commands

【参数说明】 

image.png

参数描述
column参数为一个非负整数,0为第1列,代表控件从第一列开始布局
columnspan参数为正整数,控件占n列
row参数为一个非负整数,0为第1行,代表控件从第一行开始布局
rowspan参数为正整数,控件占n行
ipadx同上Pack
ipady同上Pack
padx同上Pack
pady同上Pack
in_同上Pack
sticky

控件在grid布局的网格中默认会居中显示,该参数可以改变其显示位置,

可选参数有'n','w','s'和'e'(或N,W,S,E)(组合起来也可以用,如'nw'或NW)

【相关方法】

方法名描述
grid_configure同上pack
grid_forget同上pack
grid_info同上pack
grid_location两个参数x和y(代表像素位置),以元组形式返回该位置(x,y)在grid的网格中的列与行,若不在,则返回-1
grid_propagate同上pack
grid_columnconfigure

比较复杂,主要用于查询设置网格、网格的行属性等,

可选参数有minsize、weight、uniformpad

具体见官方说明【传送门在上边】

grid_rowconfigure类似于grid_columnconfigure
grid_remove与grid_forget相比,它的功能只有一个区别,在grid几何布局管理移除对该控件的管理后,它会保留该控件之前的配置参数,若恢复管理,则将恢复该控件之前已配置好的参数(grid_forget没有此功能)
grid_size以元组的形式返回网格的大小(先列后行)
grid_slaves同上pack
grid_content同上pack
grid_bbox

如果没有参数,将返回网格的边界框的数据(以像素为单位)。返回值由4个整数组成。前两个是从网格左上角(先x后y)的像素偏移量,后两个整数是网格的宽度和高度,也以像素为单位。

如果指定了单个列和行,则返回该单元格的边界框数据,其中左上角的单元格从零开始编号。

如果同时指定了列和行参数,则返回跨越所示行和列的边界框数据。

【代码示例】

  1. from tkinter import *
  2. root = Tk()
  3. root.title('Grid方法')
  4. root.geometry('600x600+300+100')
  5. Frame(root,bg='red',width=300,height=300).grid(column=0,row=0)
  6. Frame(root,bg='yellow',width=300,height=300).grid(column=0,row=1)
  7. Frame(root,bg='blue',width=300,height=300).grid(column=1,row=0)
  8. Frame(root,bg='green',width=300,height=300).grid(column=1,row=1)
  9. root.mainloop()

【运行效果】

image.png


【总结一下】

Pack方法比较简单,可以解决不是非常复杂的图形化界面,但是它只能单一地放置,对于网格化的图形化界面,用Pack就比较繁琐;

Place方法十分精确,它要求了很多参数,能够轻松胜任复杂的图形化界面,但是缺陷也很明显,窗口放大或缩小,Place管理的控件并不能随之改变大小及位置;

Grid方法就是网格,字面意思嘛,它能够很好地应付网格化的图形化界面,但对于复杂且规律不明显的界面而言,Grid方法就显得不太行了;

各有各的优缺点,对于不同的程序我们应该选用合适的几何布局管理器,但是给个小建议,尽量不要在同一个程序中使用不同的几何布局管理器,那样容易把自己弄晕,且代码看起来不清晰。我呢,就比较喜欢用Place了,精确控制控件的大小及位置不就和我们小时候搭积木一样吗?简单容易,就是这个位置坐标有点“费头发”......



>>>【 下节内容:子模块 messagebox、colorchooser 和 filedialog 的使用及技巧<<< 

文章知识点与官方知识档案匹配,可进一步学习相关知识

Python入门技能树首页概览336106 人正在系统学习中


来自  https://blog.csdn.net/weixin_62651706/article/details/122871584?spm=1001.2014.3001.5502



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】其他选项,具体见高级操作

【返回值】字符串对象

【提示音】信息提示音

代码示例

  1. import tkinter.messagebox
  2. return_value = tkinter.messagebox.showinfo('温馨提示', '您还没有给我点赞哦!\n记得点赞,不要忘记啦!')
  3. print(type(return_value), return_value)
  4. # <class 'str'> ok

效果展示

image.png  
showinfo  

【showwarning】

showwarning(title=None, message=None, **options)

警告提示消息框

【title】弹窗的标题

【message】字符串,要显示的信息

【options】其他选项,具体见高级操作

【返回值】字符串对象

【提示音】信息提示音

代码示例

  1. import tkinter.messagebox
  2. return_value = tkinter.messagebox.showwarning('严重警告', '如果你还不给我点赞,你的电脑将收到病毒攻击!')
  3. print(type(return_value), return_value)
  4. # <class 'str'> ok

效果展示

image.png  
showwarning  

【showerror】

showerror(title=None, message=None, **options)

错误提示消息框

【title】弹窗的标题

【message】字符串,要显示的信息

【options】其他选项,具体见高级操作

【返回值】字符串对象

【提示音】错误提示音

代码示例

  1. import tkinter.messagebox
  2. return_value = tkinter.messagebox.showerror('系统错误', '系统正在受到未知来源的病毒攻击!\n(ERROR_3X007)')
  3. print(type(return_value), return_value)
  4. # <class 'str'> ok

效果展示

image.png  
showerror  

【askquestion】

askquestion(title=None, message=None, **options)

一般询问消息框

【title】弹窗的标题

【message】字符串,要显示的信息

【options】其他选项,具体见高级操作

【返回值】字符串对象

【提示音】无

特别的,这个窗口无法点击关闭按钮,只能点击“是(Y)”或者“否(N)”

与 askyesno 的区别在于,该返回值为 str,而 askyesno 为 bool

代码示例

  1. import tkinter.messagebox
  2. return_value = tkinter.messagebox.askquestion('是否点赞', '您要给我点赞是吗?')
  3. print(type(return_value), return_value)
  4. # <class 'str'> yes(点击是) no(点击否)

效果展示

image.png  
askquestion  

【askokcancel】

askokcancel(title=None, message=None, **options)

“确定取消”询问消息框

【title】弹窗的标题

【message】字符串,要显示的信息

【options】其他选项,具体见高级操作

【返回值】布尔值

【提示音】无

代码示例

  1. import tkinter.messagebox
  2. return_value = tkinter.messagebox.askokcancel('点赞确认', '是否给这篇博客点赞?')
  3. print(type(return_value), return_value)
  4. # <class 'bool'> True(点击确定) False(点击取消或关闭)

效果展示

image.png  
askokcancel  

【askyesno】

askyesno(title=None, message=None, **options)

“是否”询问消息框

【title】弹窗的标题

【message】字符串,要显示的信息

【options】其他选项,具体见高级操作

【返回值】布尔值

【提示音】无

特别的,这个窗口无法点击关闭按钮,只能点击“是(Y)”或者“否(N)”

代码示例

  1. import tkinter.messagebox
  2. return_value = tkinter.messagebox.askyesno('收藏确认', '是否收藏这篇博客?')
  3. print(type(return_value), return_value)
  4. # <class 'bool'> True(点击是) False(点击否)

效果展示

image.png  
askyesno  

【askyesnocancel】

askyesnocancel(title=None, message=None, **options)

“是否取消”询问消息框

【title】弹窗的标题

【message】字符串,要显示的信息

【options】其他选项,具体见高级操作

【返回值】布尔值或者 None

【提示音】无

代码示例

  1. import tkinter.messagebox
  2. return_value = tkinter.messagebox.askyesnocancel('支持', '是否点赞并收藏这篇博客?')
  3. print(type(return_value), return_value)
  4. # <class 'bool'> True(点击是) False(点击否) None(点击取消或关闭)

效果展示

image.png  
askyesnocancel  

【askretrycancel】

askretrycancel(title=None, message=None, **options)

“重试取消”询问消息框

【title】弹窗的标题

【message】字符串,要显示的信息

【options】其他选项,具体见高级操作

【返回值】布尔值

【提示音】信息提示音

代码示例

  1. import tkinter.messagebox
  2. return_value = tkinter.messagebox.askretrycancel('提示', '运气不佳,白嫖失败!')
  3. print(type(return_value), return_value)
  4. # <class 'bool'> True(点击重试) False(点击取消或关闭)

效果展示

image.png  
askretrycancel  

高级操作

        高级操作呢,一般人是不知道的,只有看了子模块 messagebox 源代码的人才知道,为什么这么说呢,下面我们看看部分源代码就知道了

  1. # tk common message boxes
  2. # tk的常见消息框
  3. # this module provides an interface to the native message boxes
  4. # available in Tk 4.2 and newer.
  5. # 该模块为Tk 4.2及更新版本中可用的本地消息框提供接口
  6. # written by Fredrik Lundh, May 1997
  7. # 作者:Fredrik Lundh,1997年5月
  8. #
  9. # options (all have default values):
  10. # 参数(都有默认值)
  11. # - default: which button to make default (one of the reply codes)
  12. # 设置默认值的按钮(其中一个回复代码)
  13. # - icon: which icon to display (see below)
  14. # 要显示的图标(见下文)
  15. # - message: the message to display
  16. # 要显示的消息
  17. # - parent: which window to place the dialog on top of
  18. # 将对话框放置在哪个窗口的上面
  19. # - title: dialog title
  20. # 对话框标题
  21. # - type: dialog type; that is, which buttons to display (see below)
  22. # 对话框类型;也就是说,要显示哪些按钮(见下文)
  23. # constants
  24. # icons               【用于icon参数】
  25. ERROR = "error"        # “错误”图标
  26. INFO = "info"          # “信息”图标
  27. QUESTION = "question"  # “询问”图标
  28. WARNING = "warning"    # “警告”图标
  29. # types                               【用于type参数】
  30. ABORTRETRYIGNORE = "abortretryignore"  # 中止、重试、忽略  (3个按钮的模式)
  31. OK = "ok"                              # 确定             (1个按钮的模式)
  32. OKCANCEL = "okcancel"                  # 确定、取消       (2个按钮的模式)
  33. RETRYCANCEL = "retrycancel"            # 重试、取消       (2个按钮的模式)
  34. YESNO = "yesno"                        # 是、否           (2个按钮的模式)
  35. YESNOCANCEL = "yesnocancel"            # 是、否、取消     (3个按钮的模式)
  36. # replies         【用于default参数】
  37. ABORT = "abort"    # 默认为“中止”按钮
  38. RETRY = "retry"    # 默认为“重试”按钮
  39. IGNORE = "ignore"  # 默认为“忽略”按钮
  40. OK = "ok"          # 默认为“确定”按钮
  41. CANCEL = "cancel"  # 默认为“取消”按钮
  42. YES = "yes"        # 默认为“是”按钮
  43. NO = "no"          # 默认为“否”按钮

        上面这段说明(不含中文翻译)是子模块 messagebox 的模块文档说明(很重要),我们发现啊,除了我们可以直接看到的 title 参数和 message 参数外,其实还有其他参数的,只不过它们被用 **options 给代替了,导致我们不知道还有什么参数(可能是因为一般不用修改这些参数,它们只需要采用默认值就行了叭)

(作者 Fredrik Lundh 在1997年就写出了这么牛逼轰轰的代码,膜拜啊 ~ 膜拜啊 ~ orz)

代码示例

  1. import tkinter.messagebox
  2. return_value = tkinter.messagebox.askyesnocancel('程序错误', '您可以选择终止程序的运行\n或者重新尝试运行\n或者忽略错误继续运行',
  3. default=tkinter.messagebox.ABORT,
  4. icon=tkinter.messagebox.ERROR,
  5. type=tkinter.messagebox.ABORTRETRYIGNORE)

效果展示

image.png  
高级操作  

还有其他的大家也可以积极尝试呀!

二、colorchooser 子模块

        你们知道颜色选择器是什么东东嘛?打开 Word 文档,随便输入什么东西,然后选中输入的文本,修改其颜色时,可以看到有个“其他颜色”的按钮,点一下,就会弹出来一个弹窗,而这个弹窗就是 Word 的颜色选择器,它可以得到 RGB 码中的任意一种颜色

        而 tkinter 模块也有一个内置的颜色选择器,功能和别的颜色选择器差不多,但是样子稍有不同

  1. askcolor(color: str | bytes | None = ...,
  2. *,
  3. initialcolor: _Color = ...,
  4. parent: Misc = ...,
  5. title: str = ...)

【color】同下面的 initialcolor

【initialcolor】初始颜色,格式为含有 3 个范围在 0~255 整数的元组

【parent】颜色对话框的父窗口(颜色对话框将显示在其上面)

【title】对话框的标题

【返回值】一个元组,格式: (颜色元组, RGB码)

代码示例

  1. import tkinter.colorchooser
  2. print(tkinter.colorchooser.askcolor())
  3. # (None, None) 点击取消或关闭
  4. # ((0, 0, 0), '#000000') 格式: (颜色元组, RGB码)

效果展示

image.png  
colorchooser  

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

image.png  
Word 文档的颜色选择器  

其实他俩差不了多少

三、filedialog 子模块

        我们平时打开文件啊、保存文件等,都会有一个弹窗弹出来,让我们选择打开的文件或保存路径等,而这些弹窗就是文件对话框,很幸运啊,tkinter 模块的 filedialog 子模块早在 1997 年就有了这些接口(作者还是上文提到的那个“大牛”),让我们来看一看吧

【askopenfilename】

  1. askopenfilename(*,
  2. defaultextension: str | None = ...,
  3. filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
  4. initialdir: StrOrBytesPath | None = ...,
  5. initialfile: StrOrBytesPath | None = ...,
  6. parent: Misc | None = ...,
  7. title: str | None = ...,
  8. typevariable: StringVar | str | None = ...)

文件打开

【defaultextension】默认扩展名(如果没有写扩展名)

【filetypes】文件类型选项(可迭代对象)

格式:[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])] 

【initialdir】初始目录

【initailfile】初始文件名(可加扩展名,也可不加,不加则使用默认扩展名)

【parent】父窗口(弹窗会显示在父窗口上面,也可以空着为默认值,则直接弹出)

【title】窗口标题

【typevariable】类型变量

【返回值】字符串对象(文件路径) 

代码示例

  1. import tkinter.filedialog
  2. return_value = tkinter.filedialog.askopenfilename(filetypes=[('All Files', '.*')],
  3. title='打开文件',
  4. initialfile='Python.py',
  5. initialdir='C:/Users/小康/Desktop')
  6. print(type(return_value), return_value)
  7. # <class 'str'> C:/Users/小康/Desktop/示例文件.txt (选中 示例文件.txt)

效果展示

image.png  
askopenfilename  

【asksaveasfilename】

  1. asksaveasfilename(*,
  2. confirmoverwrite: bool | None = ...,
  3. defaultextension: str | None = ...,
  4. filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
  5. initialdir: StrOrBytesPath | None = ...,
  6. initialfile: StrOrBytesPath | None = ...,
  7. parent: Misc | None = ...,
  8. title: str | None = ...,
  9. typevariable: StringVar | str | None = ...)

文件另存为

【confirmoverwrite】是否覆盖重名(原)文件(默认为True,即“已存在”会询问是否覆盖)

【defaultextension】默认扩展名(如果没有写扩展名)

【filetypes】文件类型选项(可迭代对象)

格式:[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])] 

【initialdir】初始目录

【initailfile】初始文件名(可加扩展名,也可不加,不加则使用默认扩展名)

【parent】父窗口(弹窗会显示在父窗口上面,也可以空着为默认值,则直接弹出)

【title】窗口标题

【typevariable】类型变量

【返回值】字符串对象(文件路径) 

代码示例

  1. import tkinter.filedialog
  2. return_value = tkinter.filedialog.asksaveasfilename(filetypes=[('所有文件', ['.py', '.txt'])],
  3. title='另存为文件',
  4. initialdir='C:/Users/小康/Desktop',
  5. defaultextension='.txt')
  6. print(type(return_value), return_value)
  7. # <class 'str'> C:/Users/小康/Desktop/hello.txt (输入 hello)

效果展示

image.png  
asksaveasfilename  

【askopenfilenames】

  1. askopenfilenames(*,
  2. defaultextension: str | None = ...,
  3. filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
  4. initialdir: StrOrBytesPath | None = ...,
  5. initialfile: StrOrBytesPath | None = ...,
  6. parent: Misc | None = ...,
  7. title: str | None = ...,
  8. typevariable: StringVar | str | None = ...)

多个文件打开

【defaultextension】默认扩展名(如果没有写扩展名)

【filetypes】文件类型选项(可迭代对象)

格式:[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])] 

【initialdir】初始目录

【initailfile】初始文件名(可加扩展名,也可不加,不加则使用默认扩展名)

【parent】父窗口(弹窗会显示在父窗口上面,也可以空着为默认值,则直接弹出)

【title】窗口标题

【typevariable】类型变量

【返回值】字符串对象(文件路径) 

代码示例

  1. import tkinter.filedialog
  2. return_value = tkinter.filedialog.askopenfilenames(filetypes=[('All Files', '.*')],
  3. title='打开文件',
  4. initialfile='Python.py')
  5. print(type(return_value), return_value)
  6. # <class 'tuple'> ('D:/Python 测试/a0.py', 'D:/Python 测试/a1.py', 'D:/Python 测试/a2.py')

效果展示

image.png  
askopenfilenames  

【askopenfile】

  1. askopenfile(mode: str = ...,
  2. *,
  3. defaultextension: str | None = ...,
  4. filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
  5. initialdir: StrOrBytesPath | None = ...,
  6. initialfile: StrOrBytesPath | None = ...,
  7. parent: Misc | None = ...,
  8. title: str | None = ...,
  9. typevariable: StringVar | str | None = ...)

文件打开

【mode】文件打开模式(同 open 函数的 mode 参数)

【defaultextension】默认扩展名(如果没有写扩展名)

【filetypes】文件类型选项(可迭代对象)

格式:[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])] 

【initialdir】初始目录

【initailfile】初始文件名(可加扩展名,也可不加,不加则使用默认扩展名)

【parent】父窗口(弹窗会显示在父窗口上面,也可以空着为默认值,则直接弹出)

【title】窗口标题

【typevariable】类型变量

【返回值】文件 IO 对象

代码示例与效果展示类似于上面的 askopenfilename

【askopenfiles】

  1. askopenfiles(mode: str = ...,
  2. *,
  3. defaultextension: str | None = ...,
  4. filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
  5. initialdir: StrOrBytesPath | None = ...,
  6. initialfile: StrOrBytesPath | None = ...,
  7. parent: Misc | None = ...,
  8. title: str | None = ...,
  9. typevariable: StringVar | str | None = ...)

多个文件打开

【mode】文件打开模式(同 open 函数的 mode 参数)

【defaultextension】默认扩展名(如果没有写扩展名)

【filetypes】文件类型选项(可迭代对象)

格式:[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])] 

【initialdir】初始目录

【initailfile】初始文件名(可加扩展名,也可不加,不加则使用默认扩展名)

【parent】父窗口(弹窗会显示在父窗口上面,也可以空着为默认值,则直接弹出)

【title】窗口标题

【typevariable】类型变量

【返回值】元组形式的文件 IO 对象

代码示例与效果展示类似于上面的 askopenfilenames

【asksaveasfile】

  1. asksaveasfile(mode: str = ...,
  2. *,
  3. confirmoverwrite: bool | None = ...,
  4. defaultextension: str | None = ...,
  5. filetypes: Iterable[tuple[str, str | list[str] | tuple[str, ...]]] | None = ...,
  6. initialdir: StrOrBytesPath | None = ...,
  7. initialfile: StrOrBytesPath | None = ...,
  8. parent: Misc | None = ...,
  9. title: str | None = ...,
  10. typevariable: StringVar | str | None = ...)

文件另存为

【mode】文件打开模式(同 open 函数的 mode 参数)

【confirmoverwrite】是否覆盖重名(原)文件(默认为True,即“已存在”会询问是否覆盖)

【defaultextension】默认扩展名(如果没有写扩展名)

【filetypes】文件类型选项(可迭代对象)

格式:[(文件说明, 文件扩展名)] 或者 [(文件说明, [文件扩展名1, 文件扩展名2, ...])] 

【initialdir】初始目录

【initailfile】初始文件名(可加扩展名,也可不加,不加则使用默认扩展名)

【parent】父窗口(弹窗会显示在父窗口上面,也可以空着为默认值,则直接弹出)

【title】窗口标题

【typevariable】类型变量

【返回值】文件 IO 对象

代码示例与效果展示类似于上面的 asksaveasfilename

【askdirectory】

  1. askdirectory(*,
  2. initialdir: StrOrBytesPath | None = ...,
  3. mustexist: bool | None = ...,
  4. parent: Misc | None = ...,
  5. title: str | None = ...)

选择文件夹

【initialdir】初始目录

【mustexist】是否必须为现有目录

【parent】父窗口(弹窗会显示在父窗口上面,也可以空着为默认值,则直接弹出)

【title】窗口标题

【返回值】字符串对象(文件夹路径)

代码示例

  1. import tkinter.filedialog
  2. return_value = tkinter.filedialog.askdirectory()
  3. print(type(return_value), return_value)
  4. # <class 'str'> C:/Users/小康/Desktop

效果展示

image.png  
askdirectory  

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
           
普通分类: