建设企业网站都需要啥,seo关键词优化培训班,网站数据库建设计划书,动画制作软件手机【Tkinter 入门教程】 1. Tkinter库的简介#xff1a;1.1 GUI编程1.2 Tkinter的定位 2. Hello word! 程序起飞2.1 第⼀个程序2.2 字体颜色主题 3. 组件讲解3.1 tkinter 的核⼼组件3.2 组件的使⽤3.3 标签Label3.3.1 标签显示内容3.3.2 多标签的应⽤程序3.3.3 总结 3.4 按钮but… 【Tkinter 入门教程】 1. Tkinter库的简介1.1 GUI编程1.2 Tkinter的定位 2. Hello word! 程序起飞2.1 第⼀个程序2.2 字体颜色主题 3. 组件讲解3.1 tkinter 的核⼼组件3.2 组件的使⽤3.3 标签Label3.3.1 标签显示内容3.3.2 多标签的应⽤程序3.3.3 总结 3.4 按钮button3.4.1 按钮与功能的绑定3.4.2 第⼀种⽅法绑定事件3.4.3 第⼆种⽅式绑定事件3.4.4 设置属性3.4.5 总结 4. 布局layout4.1 tkinter的三种布局4.1.1 pack 布局4.1.2 pack 的布局实例 4.2 grid 布局4.3 place 布局4.4 总结 1. Tkinter库的简介
Tkinter是Tk GUI工具包的Python绑定包。它是Tk GUI工具包的标准Python接口并且是Python的业界标准GUI工具包。Tkinter同时也包含在Python的Linux、Microsoft Windows和Mac OS X标准库中。Tkinter的名字来自Tk interface。 若在命令行执行 python -m tkinter应会弹出一个简单的 Tk 界面窗口 表明 tkinter 包已安装完成还会显示当前安装的 Tcl/Tk 版本以便阅读对应版本的 Tcl/Tk 文档。Python3.8.10 Tkinter 支持众多的 Tcl/Tk 版本带或不带多线程版本均可。官方的 Python 二进制版本捆绑了 Tcl/Tk 8.6多线程版本。关于可支持版本的更多信息请参阅 _tkinter 模块的源代码。Tkinter 并不只是做了简单的封装而是增加了相当多的代码逻辑让使用体验更具 Python 风格pythonic。本文将集中介绍这些增加和变化部分关于未改动部分的细节请参考 Tcl/Tk 官方文档。 tkinter 的介绍 : http://en.wikipedia.org/wiki/tkinter TkDocsTkDocs Home tkinter命令:https://www.tcl.tk/man/tcl8.6/TkCmd/contents.html
1.1 GUI编程
如果有过 C 或者 Python等语⾔的编程经验开发GUI界面手到擒来在 Python ⾥⾯这种⼯具并不多这也是和 Python 是⼀个脚本语⾔有关。要说 tkinter先说 tk它原本是 Tcl 编程语⾔的界⾯库 后来开发出了Python 接⼝Tkinter 在 Python2 和 Python3 中的变化较⼤在 Python2 中叫做 Tkinter在 Python3 中叫做 tkinter⽽且在导⼊类库的时候也有些许的变化请读者稍加注意。
1.2 Tkinter的定位
掌握⼀⻔ Python 的界 ⾯编程也很有意思。有时候我们需要⼀些界⾯程序但是⼜不想⽤那些庞⼤ ⽽繁杂的类库的时候tkinter 的优势就显现出来了那就是简洁简单。我感觉 tkinter 是⼀个还不错的界⾯库但是我感觉 Python 并不是特别擅⻓复杂的应⽤麻雀虽小五脏俱全⽽且我感觉⽐如 wxPython 或者 pyQt 等更胜⼀筹但是不管怎么样我们可以通过Python⾃带的tkinter进⼊GUI编程的世界。鹏鹏只用两周就完成项目啦相信接下来可以帮助你
2. Hello word! 程序起飞
2.1 第⼀个程序
我们新建⼀个⽆格式的⽂本⽂件通常是.txt ⽂件然后修改名称为 Hello_World.py然 后⽤⽂本编辑器打开然后写三⾏代码。
#导入Tkinter模块并用别名tk引用它。import tkinter as tk
#定义一个函数say_hello当按钮被点击时这个函数会被调用。 这个函数会更新标签label的文本为Hello World!。def say_hello():label.config(textHello World!)
#创建一个顶级窗口root window这是整个GUI程序的基础。root tk.Tk()
#创建一个标签Label设置其初始文本为Click the button to say hello!并将其添加到根窗口中。label tk.Label(root, textClick the button to say hello!)
label.pack()
#pack()方法用于将控件放置在父容器中并自动调整它们的大小和位置。
#创建一个按钮Button设置其文本为SAY Hello并将其命令属性设置为say_hello函数。这意味着当用户点击此按钮时say_hello函数将被调用。button tk.Button(root, textSay Hello, commandsay_hello)
button.pack()
#最后进入主循环。在此过程中程序会持续监听用户的操作如点击按钮等并作出相应的响应。root.mainloop()
总结起来这个程序会在屏幕上显示一个窗口其中包含一个标签和一个按钮。当用户点击Say Hello按钮时标签上的文本会变为Hello World!。
2.2 字体颜色主题
要设置不同的字体颜色主题可以使用font属性为标签和按钮设置自定义的字体颜色。下面是一个示例演示如何将文本颜色设置为红色
import tkinter as tkdef say_hello():label.config(textHello World!)root tk.Tk()# 创建一个自定义的字体对象设置其大小
custom_font (Arial, 14, bold)
#设置背景填充颜色
label tk.Label(root, textClick the button to say hello!, fontcustom_font, bg red)
label.pack()button tk.Button(root, textSay Hello, commandsay_hello, fontcustom_font, bg red)
button.pack()root.mainloop()在这个例子中我们创建了一个名为custom_font的自定义字体对象设置了字体名称‘Arial’、大小14、粗体样式‘bold’和背景颜色‘red’。然后我们将这个自定义字体应用到标签和按钮上。
字体名称大小粗体样式颜色Arial、 宋体1~100boldred 、green 、blue
您也可以根据需要更改字体颜色和其他属性。例如您可以创建多个不同的自定义字体对象用于表示不同的颜色主题并在程序运行时动态地切换它们。
3. 组件讲解
3.1 tkinter 的核⼼组件
在 tkinter 中有 21 个核⼼组件它们提供 了GUI开发的完整功能因为使⽤频率较⾼。这 21 个核⼼组件是 : Toplevel、Label、Button、 Canvas、Checkbutton、Entry、Frame、LabelFrame、 Listbox、Menu、Menubutton、Message、OptionMenu、PaneWindow 、 Radiobutton 、 Scale 、Scrollbar 、Spinbox 、Text、Bitmap、Image。
3.2 组件的使⽤
各个组件都有相应的类我们可以通过⾯向对象的⽅式 去使⽤它们。这些组件的使⽤也很相似在实例化这些组件的时候 第⼀个参数都是⽗窗⼝或者⽗组件后⾯跟着的就是该组 件的⼀些属性⽐如上⾯我们学到的 Label 的 text属性和 background 属性。多个组件的位置控制⽅式也很相似我们可以⽤ pack ⽅法来进⾏简单的布局具体的个例我们后⾯再说。组件也会有些⽅法是共⽤的⽐如 configure ⽅法来设置属性等等。
3.3 标签Label
标签就是输出显示信息可动态也可静态✨✨✨
3.3.1 标签显示内容
所谓 标签 就是贴在物品前⾯的⼀个简短的说明 它⽤于说明⼀些⽂字信息。标签可以说是最简单的窗⼝组件了它不需要执⾏任何功能只是⽤来显示信息。下⾯是代码示例:
from tkinter import *
root Tk()
root.wm_title(这是⼀个Tkinter程序窗⼝标题)
wl Label(root, text 欢迎来到tkinter)
wl.pack()
root.mainloop()代码分析 这⾥的 Label 是⼀个类可以在 init.py ⽂件⾥查看 相应的源代码。wl 是⼀个 Label 的实例它有⼀个 text 属性 ⽤来指定 它的⽂本内容。⼤家可以看到它的标准属性⽐如有 background font bitmap padx relief 等等 还有 underline 等等。该类有个 pack ⽅法没错这个 pack ⽅法我们后⾯会 讲⼤家可以理解为它的作⽤就是找个合适的位置进⾏放置即可即 pack() 之后就选定位置放上去了。这⾥的初始化的时候需要先指定 root是说 wl 这个组 件是在 root 这个窗⼝的不是属于别的窗⼝的以后我们 有了多窗⼝的应⽤程序不会混淆。 3.3.2 多标签的应⽤程序
如果我们想要多个标签该怎么办呢?很简单只需要声明多个标签的实例然后分别 pack 到 窗⼝上即可。
from tkinter import *
root Tk()
root.wm_title(这是⼀个Tkinter程序窗⼝标题)
w1 Label(root, text 欢迎来到tkinter教程, background white)
w2 Label(root, text 好好学习天天向上, background green)
w3 Label(root, text 轻松愉快就选Python, background red)
w1.pack()
w2.pack()
w3.pack()
root.mainloop() 3.3.3 总结
我们这⼀节学习了 Label 这个组件它的创建使⽤ Label 这个类实例化的时候⾸ 先要指定它的⽗窗⼝然后就是 ⽤字典的⽅式设置⾃⼰的⼀些特征这些特征上⾯ 都列出 了但是没有实例演示。然后使⽤ pack() ⽅法布局上去关于布局我们后⾯会详 细讲这⾥我们统⼀使⽤ pack() 就可以了。
3.4 按钮button
按钮也是⾮常重要的组件 按钮的重要性在于它可以执⾏相应 的功能。按钮的英⽂表述是 button 它随处可⻅当我们单 击的时候它可以执⾏相应的功能。按钮在 tkinter 中有⼀个类专⻔负责它叫做 Button 该类也⾮常简短。
3.4.1 按钮与功能的绑定
上⽂说到按钮可以执⾏相应的功能这⾥的功能我们 可以理解为⼀个函数或者这些功能通过相应的函数去实 现。绑定⽅式通常有如下⼏种:第⼀种在按钮组件被声明 的时候⽤ command 属性声明 command 属性接受⼀个函数名 注意函数名不要加双引号。第⼆种使⽤ bind⽅法该⽅ 法是 Misc 这个类的⼀个⽅法下⾯我们仔细讲解。
3.4.2 第⼀种⽅法绑定事件
我们要完成的功能是我们按下这个按钮的时候就会在 窗⼝上增加⼀个 Label它显示“我爱 python”。
from tkinter import *
def myLabel():global py, is Label(py, text 轻松愉快就选Python! 重要的事情说 %d 遍 % i)s.pack()i1 # 每次点击后i的值会⾃增1
py Tk()
i 1 # 全局变量i 初始化为 1
b Button(py, text Python, command myLabel)
b.pack()
py.mainloop()运⾏结果⼀开始是只有⼀个按钮的点击⼀下就会在这个窗⼝上多⼀个标签下⾯是我点击了三次之后的截图): 代码解读 其实很简单这⾥只需要注意 command 属性后⾯不要加任何的标点符号。这⾥的 myLabel 函数中使⽤了全局的 py 和 i 变量需要注意。 3.4.3 第⼆种⽅式绑定事件
下⾯使⽤第⼆种⽅式来绑定事件这个事件完成同样的功能。
from tkinter import *
# method 1
# def myLabel():
# method 2
def myLabel(event):global py, is Label(py, text 轻松愉快就选Python! 重要的事情说 %d 遍 % i)s.pack()i1 # 每次点击后i的值会⾃增1
py Tk()
i 1 # 全局变量i 初始化为 1
# method 1
# b Button(py, text Python, command myLabel)
# method 2
b Button(py, text Python) # command myLabel ⽊有了
b.bind(Button-1, myLabel) # 多了这⼀句b.pack()
py.mainloop()
和第⼀种⽅法的结果⼀样 代码解读 bind这个⽅法是在 Misc 类中的可以接受三个参数但是本例中我们只传递了两个参数。第⼀个参数可能对刚使⽤它的⼈来说有点复杂常⻅的⿏标左键单击如下: Button1 也就是上⾯的代码⽤到的或者 等。第⼆个参数可以是⼀个函数名记住不要加任何的标 点符号否则运⾏时会报错的。使⽤ bind 函数的时候第⼆个参数是⼀个函数名该函数必须接受⼀个参数即表示该事件。 这个参数通常⽤ event 来表示如果我们调⽤的函数不接 受任何参数则会报错如下 : TypeError: myLabel() takes no arguments (1 given) bind的第⼀个参数是⽤字符串包含的事件类型它采⽤的描述⽅式是: MODIFIER-MODIFIER-TYPE-DETAIL
这⾥的 MODIFIER 即键盘或者⿏标修饰符它的全部取值如下: Control Mod2M2 Shift Mod3 M3 Lock Mod4 M4 Button1 B1 Mod5 M5, Button2 B2 Meta M Button3B3 Alt Button4 B4 DoubleButton5 B5 Triple Mod1 M1TYPE 表示类型它的全部取值如下: Activate Enter Map ButtonPressButton Expose Motion ButtonRelease FocusIn MouseWheelCirculate FocusOut Property Colormap Gravity Reparent ConfigureKeyPress Key Unmap Deactivate KeyRelease Visibility DestroyLeaveDETAIL 表示细节其实也就是对第⼆个参数的⼀些辅助说明。
3.4.4 设置属性
下⾯我们可以设置⼀些属性这些东⻄随着⼤量的代码示例⼤家会接触不少的。 ⽐如我们可以设置背景⾊这⾥直接设置属性代码截 图:
from tkinter import *
py Tk()
b1 Button(py, text tkinter教程)
b1[width] 20
b1[height] 6
b1.pack()
b2 Button(py, text Python学院)
b2[width] 40
b2[background] white
b2.pack()
py.mainloop()3.4.5 总结
关于按钮我们重点理解的就是它如何和事件进⾏绑定的。当然使⽤⼀些其他属性来美化按钮也很重要。下⾯要讲⼀讲布局⽅⾯的东⻄了。
4. 布局layout
对于任何⼀⻔图形界⾯编程来说布局都是⾮常重要 的⼀关它的英⽂翻译叫做“layout”。不管是MFC、Java、还是Qt等图形界⾯编程 都会有有布局的相关知识。 Python 的 tkinter 也⼀样。
4.1 tkinter的三种布局
其实我们已经接触过 tkinter 的⼀种布局就是 pack 布局它⾮常简单我们不⽤做过多的设置直接使⽤⼀个 pack 函数就可以了。grid 布局: grid 可以理解为⽹格或者表格它可以把 界⾯设置为⼏⾏⼏列的⽹格我们在⽹格⾥插⼊我们想要 的元素。这种布局的好处是不管我们如何拖动窗⼝相对 位置是不会变化的⽽且这种布局也超简单。place 布局:它直接使⽤死板的位置坐标来布局这样做 的最⼤的问题在于当我们向窗⼝添加⼀个新部件的时候 ⼜得重新测⼀遍数据且我们不能随便地变⼤或者缩⼩窗⼝否则可能会导致混乱。
4.1.1 pack 布局
我们使⽤ pack 函数的时候默认先使⽤的放到上⾯然 后 依次向下排它会给我们的组件⼀个⾃认为合适的位置 和⼤⼩这是默认⽅式也是我们上⾯⼀直采⽤的⽅式。pack 函数也可以接受⼏个参数
side 参数指定了它停 靠在哪个⽅向可以为 LEFTTOPRIGHTBOTTOM分别代表 左上右下fill 参数可以是 XYBOTH 和 NONE即在⽔平⽅向填充竖直⽅向填充⽔平和竖直⽅向填充和不填充。expand 参数可以是 YES 和 NO它的 anchor 参数可 以是 NESW(这⾥的 NESW 分别表示北东南⻄这⾥分别 表示上右下左)以及他们的组合或者是CENTER(表示中 间)。ipadx 表示的是内边距的 x ⽅向它的 ipady 表示 的是内边距的 y ⽅向padx表示的是外边距的 x ⽅向 pady 表示的是外边距的 y ⽅向。
4.1.2 pack 的布局实例
根据上⾯的介绍我们可以做出如下布局的样⼦:按理说做的这么复杂本身没什么意思,只是想让⼤家看 ⼀下其实 pack 也可以完成相对复杂的布局,它的源代码如下:
from tkinter import *
root Tk()
Button(root, text A).pack(side LEFT, expand YES, fill Y)
Button(root, text B).pack(side TOP, expand YES, fill BOTH)
Button(root, text C).pack(side RIGHT, expand YES, fill NONE, anchor NE)
Button(root, text D).pack(side LEFT, expand NO, fill Y)
Button(root, text E).pack(side TOP, expand NO, fill Y)
Button(root, text F).pack(side BOTTOM, expand YES)
Button(root, text G).pack(anchor SE)
root.mainloop()4.2 grid 布局
由于我们的程序⼤多数都是矩形,因此特别适合于⽹格 布局,也就是 grid 布局。使⽤ grid 布局的时候,我们使⽤ grid 函数,在⾥⾯指 定两个参数,⽤ row 表示⾏,⽤ column 表示列注意的是 row 和 column 的编号都从 0 开始。grid 函数还有个 sticky 参数,它可以⽤ N,S,W,E 表示 上,下,左,右 , 它决定了这个组件是从哪个⽅向开始的, 下⾯的例⼦可以很好的解释这⼀点。grid 布局直接⽤后⾯的⾏和列的数字来指定了它位于哪个位置,⽽不必使⽤其他参数。grid 函数也⽀持诸如 ipadx,ipady,padx,pady ,它们的意思和 pack 函数是⼀样的,默认边距是 0。它还⽀持参数⽐如 rowspan ,表示跨越的⾏数, columnspan 表示跨越的列数。它还有⼀些属性,可以在以后我们的demo中慢慢使⽤来 看出其重要性。
账号登陆例⼦的截图 界⾯如下
代码如下
from tkinter import *
py Tk()
Label(py, text 账号).grid(row 0, sticky W)
Entry(py).grid(row 0, column 1, sticky E)
Label(py, text 密码).grid(row 1, sticky W)
Entry(py).grid(row 1, column 1, sticky E)
Button(py, text 登录).grid(row 2, column 1, sticky E)
py.mainloop()代码说明: 代码⾮常简单参考grid布局介绍理解其中 Entry 表示“输⼊框”。
4.3 place 布局
关于 place 布局,这个的⼏何管理器组织放置在⼀个特定的位置它使⽤ place 函数,它分为 绝对布局 和 相对布局 绝对布局使⽤ x 和 y 参数,相对布局使⽤ relx,rely, relheight 和 relwidth 参数。该⽅法⽤的极少⽽且极度不推荐⼤家⽤这⾥就不详细说明了。
4.4 总结
place 不推荐⽤pack 和 grid 布局更常⽤⼀些。但是 pack 和 grid 不能同时⽤。⽽且通常对于较为复杂点的界⾯, 还是建议⼤家⽤gird如果布局相对简单使⽤pack 也很不错。