本文大概 4158 个字,阅读需花 10 分钟
内容不多,但也花了一些精力
如要交流,欢迎关注我然后评论区留言
谢谢你的点赞收藏分享
首先,今天先给大家拜个好年!新年快乐,恭喜发财!为了感谢大家对我的鼓励和支持,特地在公众号里搞了一波红包抽奖活动。如果需要参与沾沾手气的话,可以在1月23号22:00之前到公众号消息页面回复关键词【钱兔无量】,然后系统会自动回复抽奖活动的链接,点击进去看提示继续操作即可。
关于 Tkinter
上期讲过,python 其实有三大流行 GUI 开发框架,包括 PyQt、wxPython 和 Tkinter。wxPython 也在上期文章介绍过,今天给大伙带来 Tkinter 的入门介绍!
Tkinter 有很多强大的地方,比如跨平台特性。同一套代码可以轻松运行在 Windows, macOS 和 Linux 系统环境下。它的可视化元素都是基于本地系统元素渲染而得,所以和原生开发相比看不出来有什么区别。
对于急用的工具型软件,有必要活捉一番 Tkinter。
Tkinter 应用的基本框架是什么样子?
常用的基本控件有哪些?
除了基本控件,还有主题控件?
怎样布局界面?
如何与界面元素交互?
手把手写一个简单的记事本应用
本文所有测试代码运行环境基于 win10 x64。
基本框架
新建文件 main.py,先写一个 hello world 吧!
import tkinter as tk
window = tk.Tk(
window.title("hello world !"
window.mainloop(
可以看到,需要先导入库 tkinter,名字有点长,所以命名为 tk 方便下面的引用。
虽然 tkinter 是 python 标准库的自带 GUI 框架,但是在使用前也得先安装 tk 库。
pip install tk
安装完,使用 pip list 确认一下
Package Version
---------- -------
pip 22.3.1
setuptools 56.0.0
tk 0.1.0
写作时,当前安装的最新版本是 0.1.0。
《Python:灵活的开发环境》
python main.py
看看跑起来的界面程序什么样子
基本控件
下面是一些基本又常用的控件
控件类 | 说明 |
---|---|
Label | 文本标签,显示静态文本 |
Button | 按键,可点击的按键 |
Frame | 矩形区域,组合相关控件 |
Entry | 单行输入框,输入单行文本 |
Text | 多行输入框,输入多行文本 |
Spinbox | 范围输入框,选择指定范围内的值 |
Scale | 刻度条,拖动按钮选取数值 |
Progressbar | 进度条,显示进度 |
Listbox | 列表,显示浏览和选择单行文本项的列表 |
Label 文本标签
做界面的时候,如果你需要显示一些静态的文本,比如在某些元素前面显示一个名称,那么就可以用到控件 Label。这里要注意,控件 Label 被设计用于向用户显示文本,而不是获取文本。
display text with framework tkinter
import tkinter as tk
window = tk.Tk(
lbl = tk.Label(
master=window,
text="display text with tkinter framework",
fg="white",
bg="black",
width=40,
height=10
lbl.pack(
window.mainloop(
实例化类 Label 的时候,演示了传入参数 master,text,fg,bg,width 和 height。
注意:如果 master 参数被忽略,那么被实例化的控件就默认被放置在顶层窗口中。
参数 fg 和 bg 分别是 fontground 和 background 的缩写,分别表示字体颜色和背景颜色。可以输入有效的颜色名字,比如 "white","black","red","orange","yellow","green","blue","purple"等,或者输入 # 开头的 RGB 值,比如 "#34A2FE"。
要注意的是,上面用到的参数 width 和参数 height 的单位不是像素而是文本单位,1个单位 width 表示文本字符 0 的宽度,1个单位 height 表示文本字符 0 的高度。所以,如果 width 和 height 数值相等,那么实际显示效果也不会是正方形。
看看显示效果
import tkinter as tk
window = tk.Tk(
var_lbl = tk.StringVar(
var_lbl.set("display text with tkinter framework"
lbl = tk.Label(
master=window,
fg="white",
bg="black",
width=40,
height=10,
textvariable=var_lbl
lbl.pack(
print(f"{var_lbl.get(}"
window.mainloop(
通过 tkinter 提供的 StringVar( 生成特殊字符串类型的量赋给变量 var_lbl,然后传给控件实例化的参数 textvariable。在读取控件 Label 的文本时,可通过 var_lbl.get( 获取。如果需要修改控件的文本,可通过 var_lbl.set( 传入字符串即可。
(.venv D:\englyf\python>python main.py
display text with tkinter framework
Button 按键
在界面中,为了触发某些动作,一般通过点击按键来启动。那么,tkinter 是怎么添加按键控件?
Click me! 的按键。
import tkinter as tk
window = tk.Tk(
btn = tk.Button(
text="Click me!",
width=25,
height=5,
bg="blue",
fg="yellow"
btn.pack(
window.mainloop(
参数 text 输入显示的文本字符串,参数 width 输入控件宽度,参数 height 输入控件高度,参数 bg 输入代表背景颜色的名字,参数 fg 输入代表字体颜色的名字。
控件 Button 同样支持参数 textvariable。
Frame 矩形区域
一般界面中,为了显示丰富的功能,经常需要把各种各样的控件组合在一起,那么就需要有控件充当组合粘贴板功能,而控件 Frame 刚好可以担起这个责任。
import tkinter as tk
window = tk.Tk(
frame = tk.Frame(
label = tk.Label(
master=frame,
text="I'm a label in Frame"
label.pack(
button = tk.Button(
master=frame,
text="I'm a button in Frame"
button.pack(
frame.pack(
window.mainloop(
为了把控件 Label 和 Button 粘贴到控件容器 Frame 中,只需要把控件容器 Frame 的实例引用赋值给各个控件的实例化参数 master 即可。相当于为各个控件指定父控件,那么这里的控件 Label 和 Button 也被称之为子控件。
看看显示效果
import tkinter as tk
window = tk.Tk(
frame = tk.Frame(
label = tk.Label(
master=frame,
text="I'm a label in Frame"
button = tk.Button(
master=frame,
text="I'm a button in Frame"
button.pack(
label.pack(
frame.pack(
window.mainloop(
看看显示效果
Entry 单行输入框
下面举个栗子,添加一个单行文本输入框。
import tkinter as tk
window = tk.Tk(
entry = tk.Entry(
fg="yellow",
bg="blue",
width=50
entry.pack(
window.mainloop(
实例化单行输入框控件,参数 fg 表示字体颜色,参数 bg 表示背景色,参数 width 也是文本单元的宽度。与其关注输入控件的样色,不如关心一下怎么从输入控件读取内容。
清空控件的内容,使用 delete(。输入参数 first 和 last 设置删除的字符索引范围,从 first 开始到 last 结束,不包括 last。last 可以忽略,也可以填 tk.END,表示删除内容到最后位置。
控件 Entry 同样支持参数 textvariable。
Text 多行输入框
下面举个栗子,添加一个多行文本输入框。
import tkinter as tk
window = tk.Tk(
text = tk.Text(
fg="yellow",
bg="blue",
width=50
text.pack(
window.mainloop(
实例化多行输入框控件,输入的参数和控件 Entry 类似,这里略过了。重点说一下对这个控件的内容读写操作。
清空控件的内容,使用 delete(。
<line>.<column> 的格式,比如
text.insert("1.2", "Hello"
上面的代码,表示在第1行2列处,插入字符串 Hello
Spinbox 范围输入框
下面举个栗子,添加一个这样子的输入框,并且输入范围限定在0, 100之间,步进为1。
import tkinter as tk
window = tk.Tk(
spinbox = tk.Spinbox(
master=window,
from_=0,
to=100,
increment=1
spinbox.pack(
window.mainloop(
实例化控件 Spinbox,参数 from_ 输入范围的最小值,参数 to 输入范围的最大值,参数 increment 设定步进值。
删除输入框中的内容,使用 delete(。输入参数 first 和 last,分别指定开始字符的索引和结束字符的索引。如果忽略 last,那么默认 last = first+1。
控件 Spinbox 同样支持参数 textvariable。