【Python】Tkinter模块(巨详细)

专栏文章索引:Python

有问题可私聊:QQ:3375119339

目录

一、Tkinter与GUI

1.GUI简介

2.tkinter简介

3.tkinter与ttk

二、Tkinter窗口设计

1.创建窗口

2.设置窗口属性

3.设置窗口位置

4.Widget

三、布局管理

1.pack()方法

2.grid()方法

3.place方法


一、Tkinter与GUI

1.GUI简介

Graphical User Interface,简称GUI,中文名为图形用户界面,又称图形用户接口,是一种通过图形元素(如按钮、文本框、图像等)来与计算机程序进行交互的方式。与传统的命令行界面相比,GUI更加直观和易于使用,因为用户可以直接通过点击、拖拽等方式来完成任务,而无需记忆和输入复杂的命令。

GUI通常由窗口、控件和事件处理器组成。窗口是程序的主界面,可以包含多个控件,例如按钮、文本框、标签等。控件是用户与程序交互的组件,用户可以通过控件来输入信息、执行操作等。事件处理器用于捕获用户的操作,例如点击按钮、输入文本等,然后执行相应的操作或更新界面。

常见的GUI工具包包括Tkinter、PyQt、wxPython等。Tkinter是Python标准库中内置的GUI工具包,使用简单,适合创建简单的界面和小型应用程序。PyQt和wxPython则提供了更丰富和强大的功能,可以创建更复杂的界面和商业级应用程序。

总的来说,GUI使得软件界面更加友好和直观,提高了用户体验,使得用户能够更轻松地使用软件完成任务。

2.tkinter简介

Tkinter 是 Python 中用于创建图形用户界面 (GUI) 的标准库之一。它是一个简单而强大的工具,适用于创建各种类型的窗口应用程序。Tkinter 是基于 Tk GUI 工具包的 Python 接口,Tk 是一个跨平台的工具包,最初是为 Tcl 语言设计的,但后来被移植到许多其他编程语言中,包括 Python。

Tkinter 提供了许多常用的 GUI 组件,如按钮、标签、文本框、列表框等,以及布局管理器来帮助组织这些组件的位置和大小。通过 Tkinter,开发人员可以轻松地创建用户友好的界面,使用户能够通过点击按钮、输入文本等方式与程序交互。

Tkinter 的优点包括:

  1. 易学易用:Tkinter 提供了简单直观的接口,使得开发人员可以快速上手创建界面。
  2. 跨平台性:Tkinter 是 Python 的标准库,因此可以在几乎所有支持 Python 的平台上运行,包括 Windows、macOS 和 Linux。
  3. 灵活性:Tkinter 具有丰富的功能,可以创建各种类型的界面,从简单的工具到复杂的应用程序。
  4. 社区支持:由于 Tkinter 是 Python 标准库的一部分,因此它拥有庞大的用户群体和丰富的文档资源,可以轻松找到解决问题的方法。

尽管 Tkinter 对于创建简单的界面和小型应用程序非常适用,但对于复杂的界面和商业级应用程序,可能需要使用更强大的工具包,如 PyQt、wxPython 等。但对于许多简单的 GUI 需求,Tkinter 是一个简单而有效的选择。

虽然Python中含有tkinter模块,但是我们使用时,也不能直接使用,而需要在.py文件中先导入该模块,具体导入模块的代码如下:

from tkinter import *  # 导入tkinter模块

注意:在Python2.x版本中该模块名为Tkinter,而在Python 3.x中,该模块被正式更名为tkinter。

3.tkinter与ttk

tt模块是tkinter模块中一个非常重要的模块,它相当于升级版的tkinter模块,虽然tkinter模块中已经含有较多的组件,但是这些组件样式比较简单,而为了弥补这一缺点,tkinter模块后来引入了tk模块。
虽然tt模块是tkinter模块的子模块,但是它们的差别还是比较大的,具体可以从以下三点来对比:

  • 组件的数量不同

tk模块中共包含了18个组件,其中有12个组件在tkinter模块中已经存在,这12个组件分别是Button(按钮)、Checkbutton(复选框)、Entry(文本框)、Frame(容器)、Label(标签)、LabelFrame(标签容器)Menu(菜单组件)、PaneWindow(窗口布局管理组件)、Radiobutton(单选按钮)、Scale(数值范围组件)Spinbox(含选择值的输入框)以及Scrollbar(滚动条)组件。而其余六个组件是tk模块独有的,它们分别是Combobox(组合框)、Notebook(选项卡)、Progressbar(进度条)、Separator(水平线)、Sizegrip(成长箱)和Treeview(目录树)。总的来说就是tkinter模块中有的组件,ttk模块也有,而tkinter模块中没有的组件,ttk模块依然有。

  • 组件的风格不同

tkinter模块中的组件均采用Windows经典主题风格;而tk模块中的组件均采用Windows默认主题。

  • 为组件定义样式的方法不同

目前ttk模块中的组件兼容性不是很好,例如tkinter模块为组件设置背景颜色(bg)、前景颜色(fg)等参数在ttk模块中并不支持。所以,设置tk模块中组件的样式可以使用ttk.style类来实现。

添加tt模块中的组件之前同样需要导入ttk模块,具体代码如下:

from tkinter.ttk import  # 导入ttk模块

如果希望使用ttk模块中的组件样式覆盖tkinter模块中的组件的样式,则需要通过以下方式导入:

from tkinter import *  # 导入tkinter模块
from tkinter.ttk import*  # 导入ttk模块

实例-使用tkinter和ttk在窗口中添加Button组件:

from tkinter import *  # 导入tkinter模块

win = Tk()  # 实例化窗口
win.title('这是一个tkinter小demo')  # 添加窗口标题
"""
添加按钮组件,然后设置样式,text:按钮上的文字;font:设置字号;relief:设置边框样式;
bg:设置背景颜色;pack:包装按钮,目的让按钮显示在窗口
"""
Button(win, text='laoxiaohai', font=14, relief='flat', bg='#00f5ff').pack(pady=20)
win.mainloop()  # 让程序继续执行,直到窗口被关闭,该行放置在程序的最后
使用tkinter在窗口中添加Button组件
from tkinter import *  # 导入tkinter模块
from tkinter.ttk import *  # 导入ttk模块

root = Tk()  # 创建根窗口
root.title('这是一个ttk小demo')  # 创建窗口标题
style = Style()  # 创建Style对象,便于设置样式
# 设置样式,其四个参数分别为样式添加标签、设置字号、设置组件的边框样式、设置背景颜色
style.configure('TButton', font=14, relief='flat', background='#00f5ff')
# 添加Button组件,text定义组件上的文字,style为组件引入样式
Button(text="laoxiaohai", style='TButton').pack(pady=20)
root.mainloop()  # 让程序继续执行,直到窗口被关闭,该行放置在程序的最后
使用ttk在窗口中添加Button组件

二、Tkinter窗口设计

1.创建窗口

实例-创建空白窗口:

from tkinter import *  # 导入tkinter模块

win = Tk()  # 通过Tk()方法建立一个根窗口
win.mainloop()  # 进入等待与处理窗口事件

该窗口的大小为默认大小,用户可以借助鼠标拖动窗口和改变窗口大小。其左上角的羽毛是窗口的默认图标,而羽毛右边的“tk”是窗口的默认名称。单击右侧的按钮可以最大化、最小化以及关闭该窗口。

空白窗口

2.设置窗口属性

方法 含义 示例
title() 设置窗口的标题 win.title('标题')
geoemetry("widthxheight") 设置窗口的大小以及位置,width和height为窗口的宽度和高度,单位为pielx         win.geoemetry("220x210")
maxsize() 窗口的最大尺寸 win.maxsize(500, 500)
minsize() 窗口的最小尺寸 win.maxsize(200, 500)
configure(bg=color) 为窗口添加背景颜色

1.win.configure(bg="#CD5C5C")

2.win.configure(bg='IndianRed')

resizable(True, True) 设置窗口大小是否可更改,第一个参数表示是否可以更改宽度,第二个参数表示是否可以更改高度,值为True(或1)表示可以更改宽度或高度,若为False(或0)表示无法更改窗口的宽度或高度 win.resizable(0, True)
state("zoomed") 将窗口最大化 win.state('zoomed')
iconify() 将窗口最小化 win.iconify()
iconbitmap() 设置窗口的图标

1.内置图标

  • info:信息图标
  • error:错误图标
  • question:问号图标
  • warning:警告图标
  • hourglass:沙漏图标
  • gray12:12x12 像素的灰色图标
  • gray25:25x25 像素的灰色图标
  • gray50:50x50 像素的灰色图标
  • gray75:75x75 像素的灰色图标

win.iconbitmap('question')

2.自定义图标

win.iconbitmap('table_lamp_light_icon_229888.ico')

实例-设置窗口样式:

from tkinter import *

win = Tk()
win.title('设置窗口样式')  # 窗口的标题
win.geometry('220x220')  # 窗口的大小
win.maxsize(500, 500)  # 窗口的最大尺寸
win.minsize(200, 200)  # 窗口的最小尺寸
win.configure(bg='#CD5C5C')  # 窗口的背景颜色
Label(win, text='这是内容').pack(pady=40)  # 在窗口中添加一行字
win.iconbitmap('question')  # 设置窗口的图标
win.mainloop()
窗口属性

3.设置窗口位置

  • 将窗口设置在相对屏幕左上角的位置
win.geometry("300x308+x+y")  # 此时窗口的左上角顶点为(x,y)

“+x”表示窗口左侧与屏幕左侧的距离为x;“+y”表示窗口顶部与屏幕顶部的距离为y。

  • 将窗口设置在相对屏暮右下角的位置
win.geometry("308x300-x-y")  # 此时窗口的右下角顶点为(x,y)

实例-设置窗口大小及位置

from tkinter import *

win = Tk()
win.title('窗口的位置及大小')  # 窗口的标题
win.configure(bg='PaleGreen')  # 窗口的背景颜色
winw = 300  # 窗口的宽度
winh = 220  # 窗口的高度
scrw = win.winfo_screenwidth()  # 获取屏幕的宽度
scrh = win.winfo_screenheight()  # 获取屏幕的宽度
x = (scrw - winw) / 2  # 计算窗口的水平位置,方法为:(屏幕宽度-窗口宽度)/2
y = (scrh - winh) / 2  # 计算窗口的垂直位置,方法为:(屏幕宽度-窗口宽度)/2
win.geometry('%dx%d+%d+%d' % (winw, winh, x, y))  # 设置窗口的大小和位置
Label(win, text='laoxiaohai').pack()
win.mainloop()
窗口的大小和位置

4.Widget

组件的分类

属性 含义
文本类组件
  • Label:标签组件。主要用于显示文本,添加提示信息等
  • Entry:单行文本组件。只能添加单行文本,文本较多时,不能换行显示
  • Text:多行文本组件。可以添加多行文本,文本较多时可以换行显示
  • Spinbox:输入组件。可以理解为列表菜单与单行文本框的组合体,因为该组件既可以输入内容,也可以直接从现有的选项中选择值
  • Scale :数字范围组件。该组件可以使用户拖动滑块选择数值,类似于HTML5表单中的range
按钮类组件
  • Button:按钮组件。通过单击按钮可以执行某些操作
  • Radiobutton:单选组件。允许用户在众多选择中只能选中一个
  • Checkbutton:复选框组件。允许用户多选
选择列表类组件
  • Listbox:列表框组件。将众多选项整齐排列,供用户选择
  • Scrollbar:滚动条组件。该组件可以绑定其他组件,使其他组件内容溢出时,显示滚动条
  • OptionMenu:下拉列表
  • Combobox:组合框。该组件为ttk模块中新增的组件。其功能与下拉列表类似,但是样式有所不同
容器类组件
  • Frame:框架组件。用于将相关的组件放置在一起,以便于管理
  • LabelFrame:标签框架组件。将相关的组件放置在一起,并给它们一个特定的名称
  • Toplevel:顶层窗口。重新打开一个新窗口,该窗口显示在根窗口的上方
  • PaneWindow:窗口布局管理。通过该组件可以手动修改其子组件的大小
  • Notebook:选项卡。选择不同的内容,窗口中可显示对应的内容
会话类组件
  • Message:消息框。为用户显示一些短消息,与Label类似,但是比Label更灵活
  • Messagebox:对话框。该组件提供了8种不同场景的对话框
菜单类组件
  • Menu:菜单组件。可以为窗口添加菜单项以及二级菜单
  • Toolbar:工具栏。为窗口添加工具栏
  • Treeview:树菜单
进度条组件
  • Progressbar:添加进度条

组件的公共属性

虽然tkinter模块中提供了众多组件且每个组件都有各自的属性,但有些属性是各组件通用的

属性 含义
foreground或fg 设置组件中文字的颜色
background或bg 设置组件的背景颜色
width 设置组件的宽度
height 设置组件的高度
anchor 文字在组件内输出的位置,默认为center(水平、垂直方向都居中)
padx 组件的水平间距
pady 组件的垂直间距
font 组件的文字的样式
relief 组件的边框样式
cursor 鼠标悬停在组件上时的样式
  • foreground(fg)和background (bg)设置组件的前景颜色(文字颜色)和背景颜色

实例-指定前景颜色和背景颜色:

from tkinter import *

win = Tk()
Label(win, text='laoxiaohai', fg='red', bg='yellow').pack()  # 指定前景色和背景色
win.mainloop()
指定前景色和背景色
  • width和height设置组件的宽度与高度
     

tkinter模块中大多数组件都可以通过width和height设置宽度和高度,大部分组件设置大小时,单位为像素,但是也有部分组件单位为文字的行,例如Label组件。


实例-指定组件的高度与宽度:

from tkinter import *

win = Tk()
Label(win, text='laoxiaohai', fg='red', bg='green', width=20, height=3, anchor='nw').pack()
win.mainloop()
指定组件的高度与宽度
anchor属性值

  • padx和pady设置组件的间距
     

padx和pady用于设置文字距离组件边缘的间距。通常如果没有为组件设置大小和设置间距,组件的大小应该是适应内容;如果设置了间距,那么无论标签里的内容多少,里面的内容始终能够与标签边缘保持距离。

实例-设置组件的间距

from tkinter import *

win = Tk()
Label(win, text='laoxiaohai', fg='red', bg='grey', padx=20, pady=10).pack()
win.mainloop()
设置组件的间距

  • font设置文字属性

font标签中可以设置文字相关属性
 

参数 含义
size 设置字号,单位px
family 设置字体,例如Times
weight 设置文字粗细,如bold
slant 设置斜体,如italic
underline 添加下划线,值为True或者False添加删除线,值为True或者
overstrike False

实例-设置文字属性

from tkinter import *

win = Tk()
Label(win, text='laoxiaohai', fg='red', bg='grey', font='华文新魏 16 bold').pack()
win.mainloop()
设置文字属性

  • relief属性用于设置组件的边框样式
参数 含义
flat 创建一个没有凸起或凹陷的的边框。
raised 创建一个凸起的边框。
sunken 创建一个凹陷的边框。
ridge 创建一个凸起的边框,看起来像山脊。
groove 创建一个凹陷的边框,看起来像沟槽。
solid 创建一个实心而不是凸起或凹陷的边框。

实例-设置边框样式:

from tkinter import *

win = Tk()
Button(win, text='这只是一个按钮', fg='red', bg='#00f5ff', relief='groove').pack()
win.mainloop()
设置边框样式

  • cursor:当鼠标悬停在组件上时的鼠标样式
     

因为各系统的不同,所以同样的参数值,其表现样式可能会略有差异。
 

参数 含义

arrow

标准箭头光标
circle 圆形光标
cross 十字光标
dot 点形光标
exchange 双向箭头光标
hand1、hand2 手形光标
sb_h_double_arrow、sb_v_double_arrow 水平或垂直双向箭头光标
sizing 四个角上有箭头的光标,表示可以调整大小
spider 可能的话,会显示成蜘蛛的形状

实例-设置当鼠标悬停在组件上时的鼠标样式:

from tkinter import *

win = Tk()
label = Label(win, bg="63A4EB", relief="groove", cursor="spider", width="30", height=2)
label.pack(padx=5, pady=5, side=LEFT)
win.mainloop()
设置当鼠标悬停在组件上时的鼠标样式

Widget的公共方法
 

同样,Widget中也有一些方法是各组件都通用的

  • config():为该组件配置参数。
  • keys():获取该组件的所有参数,并返回一个列表。
     

前文都是在组件中直接设置其属性,除此之外也可以通过config)配置参数。
 

案例-组件的公共方法:

from tkinter import *

win = Tk()
label = Label(win, text='laoxiaohai')
label.config(bg='red', fg='green')
label.pack()
print(win.keys())
win.mainloop()
组件的公共方法

三、布局管理

1.pack()方法

参数 含义
side 设置组件水平展示或者垂直展示
padx 设置组件距离窗口的水平距离
pady 设置组件距离窗口的垂直距离
ipadx 设置组件内的文字距离组件边界的水平距离
ipady 设置组件内的文字距离组件边界的垂直距离
fill 设置组件填充所在的空白空间的方式
expand 设置组件是否完全填充其余空间
anchor 设置组件在窗口中的位置
before 设置该组件应该位于指定组件的前面
after 设置该组件应该位于指定组件的后面
  • side :该参数用于设置组件水平展示或者垂直展示

top:指组件从上到下依次排列,这是side参数的默认值。
bottom:指组件从下到上依次排列。
left:指组件从左到右依次排列。
right:指组件从右向左依次排列。
 

2.grid()方法

3.place方法


相关推荐

  1. 国际上的模型领域专业资格证书

    2024-04-06 21:28:01       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-06 21:28:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 21:28:01       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 21:28:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 21:28:01       20 阅读

热门阅读

  1. 第六章:CSS最佳实践与优化

    2024-04-06 21:28:01       19 阅读
  2. 第十四届蓝桥杯省赛大学B组(C/C++)整数删除

    2024-04-06 21:28:01       21 阅读
  3. 抖音运营技巧2

    2024-04-06 21:28:01       24 阅读
  4. MyBatis plus 详解

    2024-04-06 21:28:01       56 阅读
  5. 谈谈Python中的正则表达式及其用法。

    2024-04-06 21:28:01       22 阅读
  6. 在MacOS上安装Homebrew:初学者指南

    2024-04-06 21:28:01       28 阅读