Python的门面担当

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

在大多数时候,我们都在黑黢黢的控制台里执行 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 版本。


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

下课!


如需了解视频课程及答疑群等更多服务,请号内回复 码上行动

代码相关问题可以在论坛上发帖提问 bbs.crossincode.com

推荐阅读:

押韵工具 | 虎扑| 开发工具 | 查天气 | 我用Python | 知乎 | 排序 | 朋友圈 | 电影票 | 技术宅 |单词表 | 新手建议

相关文章
Tkinter:Python的门面担当
在大多数时候,我们都在黑黢黢的控制台里执行 Python 脚本。这看起来很酷很 GEEK。但对于部分场景下的用户来说,这样就不大美观和人性化了:我们需要交互更方便的图形化产品,也就是 GUI(图形用户界面,Graphical User Interface)。
|
15天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
14天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
97 80
|
21天前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
133 59
|
1天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
13 2
|
14天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
40 10
|
18天前
|
机器学习/深度学习 人工智能 Java
Python 语言:强大、灵活与高效的编程之选
本文全面介绍了 Python 编程语言,涵盖其历史、特点、应用领域及核心概念。从 1989 年由 Guido van Rossum 创立至今,Python 凭借简洁的语法和强大的功能,成为数据科学、AI、Web 开发等领域的首选语言。文章还详细探讨了 Python 的语法基础、数据结构、面向对象编程等内容,旨在帮助读者深入了解并有效利用 Python 进行编程。
|
16天前
|
机器学习/深度学习 人工智能 数据挖掘
探索Python编程的奥秘
在数字世界的海洋中,Python如同一艘灵活的帆船,引领着无数探险者穿梭于数据的波涛之中。本文将带你领略Python编程的魅力,从基础语法到实际应用,一步步揭开Python的神秘面纱。
37 12
|
15天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!