以下内容为本人的学习笔记,如需求转载,请声明原文链接 微信大众号「englyf」mp.weixin.qq.com/s/8qaS8SDCc…


本文大概 4158 个字,阅读需花 10 分钟
内容不多,但也花了一些精力
如要交流,欢迎重视我然后评论区留言
谢谢你的点赞保藏共享

首先,今日先给大家拜个好年!新年快乐,恭喜发财!为了感谢大家对我的鼓励和支撑,特别在大众号里搞了一波红包抽奖活动。假如需求参与沾沾手气的话,能够在1月23号22:00之前到大众号音讯页面回复关键词【钱兔无量】,然后体系会主动回复抽奖活动的链接,点击进去看提示持续操作即可。

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

农历新的一年开端了,打工的烦心事儿能够稍停,可是学习不能停止!

关于 Tkinter

上期讲过,python 其实有三大盛行 GUI 开发结构,包含 PyQt、wxPython 和 Tkinter。wxPython 也在上期文章介绍过,今日给大伙带来 Tkinter 的入门介绍!

Tkinter 是 python 标准库内嵌自带的界面开发结构,算得上是皇亲国戚了。如此炽热的 python ,又怎能不了解一下它自带的界面开发结构呢?

Tkinter 有许多强壮的当地,比方跨渠道特性。同一套代码能够轻松运转在 Windows, macOS 和 Linux 体系环境下。它的可视化元素都是根据本地体系元素烘托而得,所以和原生开发比较看不出来有什么区别。

另外,Tkinter 和其它 GUI 结构比较非常轻量和简洁。这就带来了很明显的缺陷,界面风格有些过时。假如你需求开发光鲜亮丽的运用,能够参阅一下我的其它博文,其中可找到其它的解决方案,总有合适你的那一款!而轻量级的长处也是很突出的,假如华丽花哨的可视化于你是无关紧要的话,Tkinter 真的能够拿来即用,也没有冗杂的开发流程,便利专注于功用的快速实现。关于急用的东西型软件,有必要活捉一番 Tkinter。

关于往期相关的文章,有爱好可前往重视我的微信大众号 「englyf」 检查,倍感荣幸能得到你的重视!

这将是一个系列文章,你能够了解到这些信息:

Tkinter 运用的根本结构是什么姿态?
常用的根本控件有哪些?
除了根本控件,还有主题控件?
怎样布局界面?
如何与界面元素交互?
手把手写一个简单的记事本运用

本文一切测验代码运转环境根据 win10 x64。

根本结构

好了,八戒为了见 Tkinter 一面,就像娶媳妇一样,匆忙揭开盖头,一睹为快。

新建文件 main.py,先写一个 hello world 吧!

import tkinter as tk
window = tk.Tk()
window.title("hello world !")
window.mainloop()

能够看到,需求先导入库 tkinter,姓名有点长,所以命名为 tk 便利下面的引证。

绝大部分的界面运用都需求一个顶层窗口,这儿经过实例化类 Tk 获得。然后在这个顶层窗口的标题栏设置标题,调用办法 title(),传入 “hello world”。最终,为了响运用户的交互和输入,有必要调用主窗口的 mainloop() 以发动事情环。

虽然 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

看看跑起来的界面程序什么姿态

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

从上面代码来看,没有冗余的部分,的确是拿来即用。

根本控件

下面是一些根本又常用的控件

控件类 说明
Label 文本标签,显现静态文本
Button 按键,可点击的按键
Frame 矩形区域,组合相关控件
Entry 单行输入框,输入单行文本
Text 多行输入框,输入多行文本
Spinbox 规模输入框,挑选指定规模内的值
Scale 刻度条,拖动按钮选取数值
Progressbar 进度条,显现进度
Listbox 列表,显现浏览和挑选单行文本项的列表

当然 tkinter 的根本控件还有不少没列出来,因为篇幅有限,本文着重于入门级别,假如你有需求查找更全面的信息能够持续重视本大众号的后续更新。所以接下来就从上面的表格中挑几个根本的控件来细讲,持续看。

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 用于指定被实例化的控件被放置在哪个父控件中,这儿指定将实例化的控件 Label 放置在顶层窗口 window 中。

注意:假如 master 参数被疏忽,那么被实例化的控件就默许被放置在顶层窗口中。

参数 text 传入的内容就是要显现的文本字符串。

参数 fg 和 bg 别离是 fontground 和 background 的缩写,别离表明字体色彩和布景色彩。能够输入有用的色彩姓名,比方 “white”,”black”,”red”,”orange”,”yellow”,”green”,”blue”,”purple”等 ,或许输入 # 开头的 RGB 值,比方 “#34A2FE”。

参数 width 和参数 height 别离用于设置控件的宽高。

要注意的是,上面用到的参数 width 和参数 height 的单位不是像素而是文本单位,1个单位 width 表明文本字符 0 的宽度,1个单位 height 表明文本字符 0 的高度。所以,假如 width 和 height 数值相等,那么实际显现作用也不会是正方形。

像上面说的那姿态,单纯创建完控件是无法显现出来的。为了显现控件,还需求调用几何图形管理器(geometry manager),如代码所示,这儿运用的几何图形管理器是 pack。当然也能够选用其它的管理器,在下面的界面布局主题章节中会专门介绍,持续看。

看看显现作用

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

另外,tkinter 对供给的带有文本的部分控件,比方 Label 等,在实例化时,还有个非常有用的参数 textvariable。这个参数需求传入 tkinter 供给的特定字符串类型的变量。然后,在需求读取和修正控件文本时,能够直接操作传入参数 textvariable 的变量。举个栗子

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 输入代表字体色彩的姓名。

要注意的是,上面用到的参数 width 和参数 height 的单位相同是文本单位。

控件 Button 相同支撑参数 textvariable。

看看显现作用

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

然后,你或许有疑问,代码中为什么没看到触发动作的内容?莫慌!这个其实归于交互的范畴,在下面的交互章节有专门介绍,持续看。

Frame 矩形区域

一般界面中,为了显现丰富的功用,经常需求把各种各样的控件组合在一起,那么就需求有控件充当组合粘贴板功用,而控件 Frame 刚好能够担起这个职责。

控件 Frame 用于组合相关控件,或许在控件之间供给填充的矩形区域,所以 Frame 是控件容器,也归于布局的内容,这儿提早说说看,便利后边引证控件 Frame 对其它控件的演示。下面举个栗子,在控件 Frame 上增加静态标签 Label 和按键 Button 各一个。

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 也被称之为子控件。

道理相似于:一个孩子只能有一个父亲,一个父亲却能够有多个孩子。

看看显现作用

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

能够看到,控件 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()

看看显现作用

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

Entry 单行输入框

界面中一般会有一些输入框,比方现在要介绍的单行文本输入框控件 Entry。假如输入的内容比较少,那么就合适运用这个控件 Entry。

下面举个栗子,增加一个单行文本输入框。

import tkinter as tk
window = tk.Tk()
entry = tk.Entry(
    fg="yellow",
    bg="blue",
    width=50
    )
entry.pack()
window.mainloop()

实例化单行输入框控件,参数 fg 表明字体色彩,参数 bg 表明布景色,参数 width 也是文本单元的宽度。与其重视输入控件的样色,不如关怀一下怎样从输入控件读取内容。

获取全部内容,运用 get()。

清空控件的内容,运用 delete()。输入参数 first 和 last 设置删去的字符索引规模,从 first 开端到 last 完毕,不包含 last。last 能够疏忽,也能够填 tk.END,表明删去内容到最终方位。

刺进内容,运用 insert()。输入参数 index 和 string 设置在索引 index 处,刺进内容 string。

控件 Entry 相同支撑参数 textvariable。

看看显现作用

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

Text 多行输入框

再来看看多行输入框控件 Text。假如输入的内容比较多,需求换行才干比较好地显现,那么就合适运用这个控件 Text。

下面举个栗子,增加一个多行文本输入框。

import tkinter as tk
window = tk.Tk()
text = tk.Text(
    fg="yellow",
    bg="blue",
    width=50
    )
text.pack()
window.mainloop()

实例化多行输入框控件,输入的参数和控件 Entry 相似,这儿略过了。要点说一下对这个控件的内容读写操作。

获取内容,运用 get()。假如没有输入参数,会引起程序执行异常。因为这个办法至少需求输入一个参数 index,用于表明获取的开端方位。还能够输入多一个参数 index,用于表明获取的完毕方位,此参数可疏忽,若疏忽则表明获取内容到最终完毕方位。

清空控件的内容,运用 delete()。

刺进内容,运用 insert()。输入参数 index 和 chars 设置在索引 index 处,刺进内容 chars。index 能够运用相似 <line>.<column> 的格式,比方

text.insert("1.2", "Hello")

上面的代码,表明在第1行2列处,刺进字符串 Hello

看看显现作用

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

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 设定步进值。

获取内容,运用 get(),返回值是输入框中的字符串。

删去输入框中的内容,运用 delete()。输入参数 first 和 last,别离指定开端字符的索引和完毕字符的索引。假如疏忽 last,那么默许 last = first+1。

刺进内容,运用 insert()。输入参数 index 和 s,index 代表开端刺进的索引,s 表明刺进的字符串。

控件 Spinbox 相同支撑参数 textvariable。

看看显现作用

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


因为篇幅受限,本系列教程还未完结,下一篇《Python 内置界面开发结构 Tkinter入门篇 乙》将在本大众号稍后推送,假如你对此教程有爱好或许想和我一起交流更多精彩内容,欢迎重视我的微信大众号 【englyf】,等着你哦!