专栏文章索引:Python
有问题可私聊:QQ:3375119339
本文内容系本人根据阅读的《Python GUI设计tkinter从入门到实践》所得,以自己的方式进行总结和表达。未经授权,禁止在任何平台上以任何形式复制或发布原始书籍的内容。如有侵权,请联系我删除。
目录
一、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 的优点包括:
- 易学易用:Tkinter 提供了简单直观的接口,使得开发人员可以快速上手创建界面。
- 跨平台性:Tkinter 是 Python 的标准库,因此可以在几乎所有支持 Python 的平台上运行,包括 Windows、macOS 和 Linux。
- 灵活性:Tkinter 具有丰富的功能,可以创建各种类型的界面,从简单的工具到复杂的应用程序。
- 社区支持:由于 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() # 让程序继续执行,直到窗口被关闭,该行放置在程序的最后

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() # 让程序继续执行,直到窗口被关闭,该行放置在程序的最后

二、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.内置图标
win.iconbitmap('question') 2.自定义图标 win.iconbitmap('table_lamp_light_icon_229888.ico') 只能是.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()