Python 内置界面开发框架 Tkinter入门篇

科技资讯 投稿 8200 0 评论

Python 内置界面开发框架 Tkinter入门篇

本文大概 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。


编程笔记 » Python 内置界面开发框架 Tkinter入门篇

赞同 (40) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽