当前位置:首页 >> 编程语言 >> 【Tkinter 入门教程】,李娜vs大威

【Tkinter 入门教程】,李娜vs大威

cpugpu芯片开发光刻机 编程语言 9
文件名:【Tkinter 入门教程】,李娜vs大威 【Tkinter 入门教程】

【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 文档。Python=3.8.10 Tkinter 支持众多的 Tcl/Tk 版本,带或不带多线程版本均可。官方的 Python 二进制版本捆绑了 Tcl/Tk 8.6多线程版本。关于可支持版本的更多信息,请参阅 _tkinter 模块的源代码。Tkinter 并不只是做了简单的封装,而是增加了相当多的代码逻辑,让使用体验更具 Python 风格(pythonic)。本文将集中介绍这些增加和变化部分,关于未改动部分的细节,请参考 Tcl/Tk 官方文档。

tkinter 的介绍 : http://en.wikipedia.org/wiki/tkinter TkDocs:TkDocs 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(text="Hello World!")#创建一个顶级窗口(root window),这是整个GUI程序的基础。root = tk.Tk()#创建一个标签(Label),设置其初始文本为"Click the button to say hello!",并将其添加到根窗口中。label = tk.Label(root, text="Click the button to say hello!")label.pack()#pack()方法用于将控件放置在父容器中,并自动调整它们的大小和位置。#创建一个按钮(Button),设置其文本为"SAY Hello",并将其命令属性设置为say_hello函数。这意味着当用户点击此按钮时,say_hello函数将被调用。button = tk.Button(root, text="Say Hello", command=say_hello)button.pack()#最后,进入主循环。在此过程中,程序会持续监听用户的操作,如点击按钮等,并作出相应的响应。root.mainloop()

总结起来,这个程序会在屏幕上显示一个窗口,其中包含一个标签和一个按钮。当用户点击Say Hello按钮时,标签上的文本会变为"Hello World!"。

2.2 字体颜色主题

要设置不同的字体颜色主题,可以使用font属性为标签和按钮设置自定义的字体颜色。下面是一个示例,演示如何将文本颜色设置为红色:

import tkinter as tkdef say_hello():label.config(text="Hello World!")root = tk.Tk()# 创建一个自定义的字体对象,设置其大小custom_font = ('Arial', 14, 'bold')#设置背景填充颜色label = tk.Label(root, text="Click the button to say hello!", font=custom_font, bg = 'red')label.pack()button = tk.Button(root, text="Say Hello", command=say_hello, font=custom_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()i+=1 # 每次点击后,i的值会⾃增1py = Tk()i = 1 # 全局变量i 初始化为 1b = 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 2def myLabel(event):global py, is = Label(py, text = "轻松愉快,就选Python! 重要的事情说 %d 遍!" % i)s.pack()i+=1 # 每次点击后,i的值会⾃增1py = Tk()i = 1 # 全局变量i 初始化为 1# method 1# b = Button(py, text = "Python", command = myLabel)# method 2b = 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, Mod2,M2, Shift, Mod3, M3, Lock, Mod4, M4, Button1, B1, Mod5, M5, Button2, B2, Meta, M, Button3,B3, Alt, Button4, B4, Double,Button5, B5 Triple , Mod1, M1TYPE 表示类型,它的全部取值如下: Activate, Enter, Map, ButtonPress,Button, Expose, Motion, ButtonRelease, FocusIn, MouseWheel,Circulate, FocusOut, Property, Colormap, Gravity Reparent, Configure,KeyPress, Key, Unmap, Deactivate, KeyRelease Visibility, Destroy,LeaveDETAIL 表示细节,其实也就是对第⼆个参数的⼀些辅助说明。 3.4.4 设置属性

下⾯我们可以设置⼀些属性,这些东⻄随着⼤量的代码示例,⼤家会接触不少的。 ⽐如我们可以设置背景⾊,这⾥直接设置属性,代码截 图:

from tkinter import *py = Tk()b1 = Button(py, text = "tkinter教程")b1["width"] = 20b1["height"] = 6b1.pack()b2 = Button(py, text = "Python学院")b2["width"] = 40b2["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 参数指定了它停 靠在哪个⽅向,可以为 LEFT,TOP,RIGHT,BOTTOM,分别代表 左,上,右,下fill 参数可以是 X,Y,BOTH 和 NONE,即在⽔平⽅向填充,竖直⽅向填充,⽔平和竖直⽅向填充和不填充。expand 参数可以是 YES 和 NO,它的 anchor 参数可 以是 N,E,S,W(这⾥的 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 也很不错。
协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2026年1月    »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接