入门教程、案例源码、学习资料、读者群

请访问: python666.cn

大家好,欢迎来到 Crossin的编程教室 !

在大多数时候,我们都在黑黢黢的控制台里执行 Python 脚本。这看起来很酷很 GEEK。但对于部分场景下的用户来说,这样就不大美观和人性化了:我们需要交互更方便的图形化产品,也就是 GUI(图形用户界面,Graphical User Interface)。

Python 有很多可实现 GUI 的库,在之前的文章中有过一个整理:如何用 GUI 提高 python 程序的颜值? 但没有针对某个具体的库做介绍。最近有同学提到希望给讲解下 GUI 的开发,那么今天就来做个简单的“快速上手”。

而我们要介绍的库,就是

Tkinter

相比较其他的 GUI 库,Tkinter 有个优势在于,它是 Python 内置的 GUI 库,无需另行安装,省事了一点点。另外如果你要将开发出的程序打包成 exe,它也比第三方库稍稍更容易一点点。

而功能上,Tkinter 已足够处理大多数小型 GUI 程序的需求。其开发的程序在各主流操作系统上均可运行。Python 的内置编辑器 IDLE 就是使用 Tkinter 开发的。因此,我个人在之前的开发中,是将 Tkinter 作为首选。

(当然,PyQt 也是很强大的 GUI 库,可以做出复杂酷炫的界面效果。而原有 QT 开发经验的人更是很容易上手。)

Hello GUI World

我们从一个最简单的 Tkinter GUI 程序说起:

import tkinter as tk
root = tk.Tk()
root.mainloop()

1.创建一个 Tk 窗口对象;2.调用这个对象的消息主循环。一个窗口就出现了。在这个窗口之上,可以添加各种输入框、按钮、文本等,可以增加对各种动作的处理。

以往我们写的程序(比如猜数字、罚点球、查天气等)大多是有一个固定的执行流程。而 GUI 程序的不同之处在于,通常它们是由“事件驱动”的:程序运行后,相当于进入一个循环一直运行。如果你不做任何操作,这个窗口就一直在这里。看起来是静止的,但程序实际上是在等待你的操作:通过与窗口中的“控件”进行交互,比如点击按钮、输入文字、勾选选项等,产生不同的“事件”,程序再根据预设的“响应”做处理。就算要结束程序,也是通过“关闭窗口”和“退出”事件。

这就是 mainloop 的意义所在:监听各种事件。理解了这一点,也就理解了 GUI 程序的基本逻辑。

控件

所谓控件,就是 GUI 图形化界面上的对象,或者说功能元素。比如输入框、文本框、按钮、下拉菜单、滚动条等等,窗体本身也可以认为是一个控件。一个控件包含了数据和操作,决定了页面上的元素放在哪里、长什么样、有什么样的效果。

举几个 Tkinter 常用控件的例子:

label = tk.Label(root, text="Hello, world!")
label.pack()
btn = tk.Button(root, text="OK")
btn.pack()
entry = tk.Entry(root)
entry.pack()
root.mainloop()

在调用 mainloop 前,增加了 Label(文本标签)、Button(按钮)、Entry(输入框)三个控件,通过 pack() 方法把它们添加到了窗口之上。

Tkinter 有 15 个核心控件,每个控件有多种设置,这里不展开介绍,网上可以很容易搜到详细的文档说明。

另外除了这些基本控件之外,Tkinter 还提供了一个 ttk 模块,增加了几个控件并对部分已有控件进行了优化。例如:

from tkinter import ttk
entry = ttk.Entry(window)
entry.pack()
combo = ttk.Combobox(window)
combo['values'] = ('IDLE', 'PyCharm', 'VSCode', 'SublimeText')
combo.pack()

完整示例代码在文末附上。

对于控件属性的设置,有 3 种方法:

  1. 创建时通过参数设置。如 btn = Button(root, text="Click", fg="red", bg="blue", command=click)

  2. 通过字典的方式修改。如 btn["fg"] = "green"

  3. 通过 config 函数修改。如 btn.config(fg="green", bg="yellow")

布局

如果只是简单的用 pack() 方法将控件添加到窗口上,它们将按顺序从上往下的放置。这显然无法满足复杂的需求。

Tkinter 提供了三种布局方式:

1. Pack

pack 是最简单的布局管理方式,除了像我们前面直接调用外,可以加上 fill、padx、pady、ipadx、ipady、side 等参数,调整放置的边距、填充方式、对齐方式等。

btn.pack(fill=tk.X, padx=5, pady=20, side=tk.LEFT)

2. Place

用 place 替代 pack,可以精确地指定空间的放置坐标及长宽。

btn.place(x=50, y=100, width=120, height=25)

3. Grid

Grid 布局的逻辑在于,将窗口像表格一样划分成不同的格子,将控件放置进去。例如:

当控件数量众多时,这种布局方式更有条理。

btn.grid(row=1, column=0)

顺便提一句,如果你希望可以像 VB 那样所见即所得地设计窗体控件,可以了解下 Visual Tkinter 这个工具。

事件

前面说的都是外在的形式,一个 GUI 程序要能运行,离不开内部的事件响应。即:当用户做了一个操作,程序要做出怎样的反应。

事件要与特定的控件相绑定,比如按钮有点击事件,输入框有按键事件,窗体有关闭事件等。

常用的 2 种绑定方法:

1. command

通过控件的 command 参数指定响应函数:

def onClick():print('clicked!')btn = Button(root, text='click', command=onClick)

注意这里传递参数时,onClick 后面不能加上括号。(思考下加与不加的区别在哪里?)

2. bind

通过 bind 方法绑定不同的事件:

def onButton(event):print("Clicked:", event.x, event.y)def onKey(event):print("Pressed", event.char)entry.bind('<Button-1>', onButton)
entry.bind('<Key>', onKey)

控件、布局、事件响应,就是 GUI 开发的几个重要部分。对此有了整体认识后,剩下的就是查阅相关文档和练习了。

如果有不理解的部分或想要深入了解的细节问题,可以在我们的论坛 bbs.crossincode.com 上发帖讨论,或在知识星球上提问。

运用上述内容,我们把课程最初的猜数字游戏改成一个 GUI 版本。

获取详细代码,请在公众号(Crossin的编程教室)里回复关键字 GUI

【课后作业】实现一个简单的 GUI 程序,猜数字或者一个简单的登录框、一个小计算器等等,可以用 Tkinter,也可以用其他 GUI 库。欢迎留言你的代码,或发在论坛上。

下课!

感谢转发点赞的各位~


_往期文章推荐_

继续打脸水货教程:关于可变对象与不可变对象


如需了解付费精品课程教学答疑服务

请在Crossin的编程教室内回复: 666

Tkinter:Python的门面担当相关推荐

  1. python开发的优秀界面-tkinter python(图形开发界面)

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinto ...

  2. tkinter python 句柄_微云收藏 python tkinter.after

    上一篇既使用win32 后来改进2.0版本 加入gui 使用的tkinter 但是每次点击,很不方便,更新后,单纯使用 tkinter ,去除掉win32(其实这个很简单) win32是支持监视剪贴板 ...

  3. python做可视化界面tkinter,python做可视化界面程序

    python 可视化界面怎么做 首先,如果没有安装python和PyQt软件的请先直接搜索下载并安装.python是一个开源软件,因此都是可以在网上免费下载的,最新版本即可.下载完成后,我们先打开Py ...

  4. python编程游戏代码tkinter,python编程游戏代码大全

    python有趣的编程代码 class Point:  row=0  col=0  def __init__(self, row, col):    =row    =col  def copy(se ...

  5. python制作简单动画_用Tkinter Python制作简单动画

    我用Tkinter搜索了一个简单的动画代码,但是我发现了非常不同的例子,我无法理解正确的方法来编写动画. 这里我的工作代码显示一个简单的移动圆:import tkinter as tk import ...

  6. python触屏模块_触摸屏滚动Tkinter Python

    以Saad的代码为基础,我使用yview_moveto对其进行了修改,使其能在每个s.O.(win.linux.mac)上运行,并且我在这里解释了一些修改.在 编辑:我编辑了代码以显示完整的类.在cl ...

  7. python界面设计实例-【Python】Tkinter图形界面设计(GUI)

    简介 作为 Python 开发者,图形用户界面(GUI)开发是必备技能之一.目前,市面上支持 Python 的"GUI 工具包"很多,各有特点,虽然大多数工具包的基础类似,但要学习 ...

  8. python的运行窗口-Python初学——窗口视窗Tkinter

    此篇文章是跟着沫凡小哥的视频学习的,附上学习网址:https://morvanzhou.github.io/tutorials/python-basic/ 什么是 tkinter 窗口 1.1 什么是 ...

  9. python tkinter计算器实例_python -Tkinter 实现一个小计算器功能

    原博文 2017-03-25 22:08 − 文章来源:http://www.cnblogs.com/Skyyj/p/6618739.html 本代码是基于python 2.7的 如果是对于pytho ...

最新文章

  1. Deep learning:三十六(关于构建深度卷积SAE网络的一点困惑)
  2. 【 MATLAB 】用 MATLAB 实现离散时间傅里叶变换(DTFT)的两个案例分析
  3. 面试中又被问到Redis如何实现抢购,赶快代码实现一波吧!
  4. vForum 2011 Beijing现场图文播报一
  5. Android 多媒体视频播放一( 多媒体理解与经验分享)
  6. MySQL 快速创建千万级测试数据
  7. 6.042 Mathematics for Computer Science
  8. Oracle P6培训系列:03设置用户设置
  9. 车牌识别系统论文python_车牌识别系统的设计与实现毕业论文
  10. 多声道在系统和软件里的设置与应用(普通声卡和dante声卡)
  11. No tests were found
  12. java替换图片文字_Java 替换PPT文档中的文本和图片
  13. HDU5855 Less Time, More profit(最大权闭合子图)
  14. c语言我想你,c语言土味情话
  15. Android系统Recovery工作原理之使用update.zip升级过程分析(一)---update.zip包的制作【转】...
  16. IDEA alt + insert快捷键不能使用
  17. java日志体系分析
  18. 镜像制作dockerfile编写
  19. 2. ansible常用模块
  20. OSPF的区域间防环详解

热门文章

  1. python各种类型的数据拼接_python基础2 数据类型、数据拼接、数据转换
  2. 买卖股票的最佳时机四
  3. 转载一篇好文章《你刚才在淘宝上买了一件东西》
  4. Zjr506的捕猫计划
  5. 【xbox开发】如何通过unity3d发布xbox one应用
  6. Win11系统开机启动XBox,如何关闭功能,解决开机痛苦???(方法简单,即可解决!!)
  7. “21天好习惯”第一期-第10天
  8. Java服务器宕机解决方法论
  9. 【typescript】断言签名与谓词签名!详解ts中神奇的asserts与is
  10. hahahahaha