![52c9b11762194b3d60164fc289ca663b.gif](https://i-blog.csdnimg.cn/blog_migrate/18244ed03acb6f2058ca2482ecaf94cc.gif)
时不时就有 b 友让我整点
“Python GUI 相关的教程”
今天小编就来给你说道说道
![4548af16eed5c4a192245988366ed744.gif](https://i-blog.csdnimg.cn/blog_migrate/f2d2a53a64006ab92dc82c35ebeec875.gif)
用 Python 来写 GUI 的库有好几个
比如 pyqt、wxpython、tkinter、kivy
相对来说比较常用的是 tkinter它是 Python 内置的库用起来比较 “直接了当”
是这样的
TK 是一个开源的开发工具包里面提供了很多界面组件的接口比如按钮、选项框、输入框这些
而且这些组件是跨平台的在不同的操作系统中都可以运行比如你常见的 MacOS,Linux,Windows
![c5ebe96e28df8d59fa1ee0778f9e6eb5.gif](https://i-blog.csdnimg.cn/blog_migrate/3e3eb746b0bc52206e7c024ef7cad514.gif)
既然如此
Python 就把这些接口调起来封装成函数和类然后整成 tkinter 模块
这样当我们想要写 GUI 的时候直接使用 Python 调用 tkinter 就好了
![6cad9baa17d9d71a51db7e1893e9c393.png](https://i-blog.csdnimg.cn/blog_migrate/79f1acdb710c8f2ce75631e91d161231.png)
在你的终端里面输入“python -m tkinter”
![6e11bec676d3e86bf2ce98c232b6fde3.png](https://i-blog.csdnimg.cn/blog_migrate/7a8b211d726bda57aae3232b86c902ff.png)
出现类似的窗口说明你的 tkinter 和 tk 都给安装上了
那么如何玩 tkinter 呢
接下来就是学习 Python 的正确姿势
![a3981e4c44bec4e5a88b39931ac30abd.png](https://i-blog.csdnimg.cn/blog_migrate/3d897a60dc6843501b4106539a37f92d.jpeg)
小编这里发一波福利包含了2020面试大全 爬虫 编程 实战项目哦 需要可以点击下方链接领取
PYTHON进阶资料 面试必备笔记 源代码 进阶视频 爬虫实战 高端项目实战免费领取shimo.im![ace10eb612fb7c90e2633972f9180833.png](https://i-blog.csdnimg.cn/blog_migrate/2fc9f6f47dd5f7e3ca61a5e43d80f029.png)
组件的使用
我先把一些常用的组件操作给你介绍一下
首先我们导入 tkinter
然后调用 Tk 方法
![fa1b9cf4c4fb110f25fad33ae5faca80.png](https://i-blog.csdnimg.cn/blog_migrate/2efc563539c773555bb8d345c0ad6282.png)
运行就可以得到一个窗口
![9ddb50b7c9ed4aaaa687984b7ff6aa82.png](https://i-blog.csdnimg.cn/blog_migrate/88321332f6c0ab1968de4bdf99e33f4d.png)
样式与你的系统类型相关
其中我们调用了 mainloop 方法
主要是让它去循环等待用户的交互
定义窗口的标题
![e945d231b8785e524110957010fb4d56.png](https://i-blog.csdnimg.cn/blog_migrate/a822490cc28f2de01169102251d56b71.png)
样式与你的系统类型相关
其中我们调用了 mainloop 方法
主要是让它去循环等待用户的交互
定义窗口的标题
![e945d231b8785e524110957010fb4d56.png](https://i-blog.csdnimg.cn/blog_migrate/a822490cc28f2de01169102251d56b71.png)
窗口的高宽是根据组件的大小相对而定的
这样能在不同的系统中比较好的运行
当然,你也可以
使用 geometry自己指定窗口的宽高
![61938c8ffa10c6879f410b37d13f8a9d.png](https://i-blog.csdnimg.cn/blog_migrate/bac042544a001b6c7c7201a986149999.png)
tkinter 把不同的组件
都封装成了 Class
比如想要往里加入文本
就可以使用 Label 对
![962b2789636354dfd07757f6ae76be48.png](https://i-blog.csdnimg.cn/blog_migrate/f907e0e6e094a666bbaa25100623665b.png)
这里创建了一个 Label 小组件
然后用 pack 塞到窗口中去
每个组件都有一些属性可以设置
比如这里可以设置常用的宽高字体颜色
![41212aa9897295fcd79248ceb43f1d26.png](https://i-blog.csdnimg.cn/blog_migrate/7becac4ea6913ac55ae3070f1151be58.png)
加个骚骚的按钮
![f3754e788273b2345512e5e0107ab825.png](https://i-blog.csdnimg.cn/blog_migrate/fe0233b2427bc8c080e8d3f473413266.png)
![ddc175d605ed8b5652d23a95aa56e820.png](https://i-blog.csdnimg.cn/blog_migrate/48f218b60d4fc97965a148bf1dc2efe0.png)
按钮可以定义点击事件
比如你想当点击按钮的时候调用方法来修改 Lable 里面的内容
可以使用 command 来绑定回调函数
![d7b6e52dbafc376997dec88e36be2ea4.png](https://i-blog.csdnimg.cn/blog_migrate/20a86fd89f2e378d73b48fea10d67440.png)
运行一波
![6116df89dd991e01546e80c943a534c2.png](https://i-blog.csdnimg.cn/blog_migrate/bbc447eeedd2041ea1ffa7d5e998fa05.png)
添加文本输入框可以使用 Entry 对象
![41b75c7afa3ee893294a623d62c4c94e.png](https://i-blog.csdnimg.cn/blog_migrate/df754f5878e83690388b2a1c2255ec20.png)
可以通过 entry 的 get 方法
获取输入的值
比如我们要让用户输入名称然后点击按钮把文字变成“xxx,你被绿了”就可以这样
![4aaa9f5a7c9caa10315435cdaad5b5c2.png](https://i-blog.csdnimg.cn/blog_migrate/1e80e2b9ab8f098b48fa0f0077bf1319.png)
这里主要是将输入的内容
作为 name 参数传给 change_label 方法
![976eb8937d56453b8db91a4687f0a234.png](https://i-blog.csdnimg.cn/blog_migrate/1785022f29524499446a23a664de95f8.png)
其它需要点击的组件使用方式和 Button 差不多
添加单选
RadioButton
![80066560597c01c2e6cac7533d5c0263.png](https://i-blog.csdnimg.cn/blog_migrate/135f3ade587fd6ad04717c7e90763d1c.jpeg)
添加下拉选择框
使用 Combbox这个需要导入 ttk
![d98df969d3da4a60b4cde7e5e11d246c.png](https://i-blog.csdnimg.cn/blog_migrate/a24d8d5d13a314d3d40547d3a2405e4d.png)
多选框
CheckButton
![6592766bad71c152ba0cfc36e96ca44a.png](https://i-blog.csdnimg.cn/blog_migrate/f077028836f0b51937a22d74767966ba.jpeg)
弹窗messagebox
让它点击按钮的时候弹窗可以这样
![37d44ddf0d42ebba553caeab61966d5a.png](https://i-blog.csdnimg.cn/blog_migrate/b3cc10c20cd5313e635a3907d7724531.png)
添加下拉选择框
使用 Combbox这个需要导入 ttk
![62fdc2de08c3bb7d89b8279b5901572e.png](https://i-blog.csdnimg.cn/blog_migrate/af5e06a587535250f0ed7271750cc98b.png)
![d98df969d3da4a60b4cde7e5e11d246c.png](https://i-blog.csdnimg.cn/blog_migrate/a24d8d5d13a314d3d40547d3a2405e4d.png)
多选框
CheckButton
![6592766bad71c152ba0cfc36e96ca44a.png](https://i-blog.csdnimg.cn/blog_migrate/f077028836f0b51937a22d74767966ba.jpeg)
弹窗messagebox
让它点击按钮的时候弹窗可以这样
![37d44ddf0d42ebba553caeab61966d5a.png](https://i-blog.csdnimg.cn/blog_migrate/b3cc10c20cd5313e635a3907d7724531.png)
![029224d93885c78f7ca154099affc649.png](https://i-blog.csdnimg.cn/blog_migrate/5525c5334f6ea27b7bd6a10775939ce4.png)
除了 showinfo 之外show 警告和错误
![660e7b0da7e7ed5a3f0a85d0d43d4d3a.png](https://i-blog.csdnimg.cn/blog_migrate/27aa122e24ac7a850f2e9a4420b413c6.png)
比如显示警告
![1da601d7130fee404df58edc24677ffb.png](https://i-blog.csdnimg.cn/blog_migrate/a6f3bfa3eceaff8c82f466bb5be54739.png)
除了 showinfo 之外show 警告和错误
![660e7b0da7e7ed5a3f0a85d0d43d4d3a.png](https://i-blog.csdnimg.cn/blog_migrate/27aa122e24ac7a850f2e9a4420b413c6.png)
比如显示警告
![1da601d7130fee404df58edc24677ffb.png](https://i-blog.csdnimg.cn/blog_migrate/a6f3bfa3eceaff8c82f466bb5be54739.png)
长文本Text
![b59b1a6da2a69847ab5a2bcadbf1004f.png](https://i-blog.csdnimg.cn/blog_migrate/de0782c7e8b251ad3ebfd33137c21281.jpeg)
获取 Text 的内容
![a2edfaea1a4c1b3f7f60769a8a745be2.png](https://i-blog.csdnimg.cn/blog_migrate/748b7b607a19f329b79ec66f07a29e33.jpeg)
其中 get 可以传入两参数一个是想要获取的行数
一个是想要获取该行中的位置
使用 tk.END 可以获取全部
组件的布局
刚刚的布局有点乱可以在组件 pack 的时候设置参数来控制组件的位置
![56546c2c10739f77ba9fbd06c649a1c8.png](https://i-blog.csdnimg.cn/blog_migrate/d33ada000315f6b02f93efefe0be368f.png)
这里用 side 指定位置padx 来指定边距
一般来说窗口如果有多个组件
会先定义 Frame 来先布局
Frame 也是一个组件
它可以填充其它组件进来
比如我们可以把刚刚的窗口
![0d3f6397f983700e6b62d6836f89cd25.png](https://i-blog.csdnimg.cn/blog_migrate/36739c20db76de5d1d22941555f801f6.png)
分成 5 个 Frame
![a707c41dc6fe2ee3e5fac0329d98d741.png](https://i-blog.csdnimg.cn/blog_migrate/a688b342260e77182a12250f7fcfa6e3.jpeg)
这里将不同的组件填充到相应的 Frame 中每个 Frame 设置的间隔为 5
![820504d07c4229f0f222e76573bdf99c.png](https://i-blog.csdnimg.cn/blog_migrate/a0a49d39695a483f36aeaef0f80f9b01.png)
另一种比较常用的布局方式是使用 grid()
你可以把窗口看成是一个多行多列的表格
比如我们想把刚刚窗口的 5 个 Frame
划分成
![1c187950ab4104d363011e35b75f9b16.png](https://i-blog.csdnimg.cn/blog_migrate/e223eea0546ed757ec6ca4c1a5f50199.png)
那么就可以这样
![8dfc11b9d50d8739f22e134b7b168066.png](https://i-blog.csdnimg.cn/blog_migrate/dd8d9843ca1c62d55944e6466ee2b6d9.jpeg)
通过 grid 去指定 frame 的
具体在第几行第几列
其中 sticky 可以控制
组件的对其方向pad 控制间距
你还可以通过
rowconfigure 和 columnconfigure来控制单元格之间的大小
![fcda48bc1810cc59514ff1f6cd7d66fc.png](https://i-blog.csdnimg.cn/blog_migrate/45cb0e040c8b02b59cdd976261729109.png)
一种更好的方式可以用面向对象的方式来使用 tkinter 写 GUI
像以下这样在类方法中定义组件和事件
![effaba8789f47ff2fe04f8d0991f0791.png](https://i-blog.csdnimg.cn/blog_migrate/fd86770ef1b03dd3d7bd5816c74cc015.jpeg)
ok,以上
你可以自己去写点界面玩玩
当然了我在这里只是介绍一些常用组件的使用
大多组件的使用方式都差不多
更多的组件和使用细节可以参考https://docs.python.org/3/library/tk.html
哦对了
之前在 VIP 简单写了下聊天室的实现用的也是 tkinter
![38cc319539c428e13922a28dd8136fdc.gif](https://i-blog.csdnimg.cn/blog_migrate/0329e12e8f0ce77502c223cb2e28c3be.gif)
希望对你又帮助