Python基础之GUI编程

简介: Python基础之GUI编程

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。相比于命令行模式,更加方便用户操作,增强用户体验。本文以一个简单的登录窗口为例,简述GUI(图形化用户界面)编程的相关知识点,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、相关知识点如下:

  • Tk:定义一个图形化窗口,其中title用于设置标题,geometry用于设置大小,位置,mainloop方法用于显示界面。
  • Label: 定义一个文本显示标签,用户无法修改内容
  • Entry: 定义一个文本框,用户可以输入内容。
  • Button:按钮,可以绑定单击事件,响应用户的操作。
  • pack:布局方式的一种,默认一行一个元素,居中显示,可以设置anchor来设置对齐方式。

登录功能分析与设计

  • 需求描述:
  • 用户需要输入用户名密码,然后点击登录按钮进行登录。
  • 程序设计:
  • 需要两个文本框用于输入用户名和密码,以及对应的标签
  • 需要一个登录按钮并在单击时响应对应事件。
  • 登录事件需要对输入的用户名密码进行校验。如不合法,需要进行提示。
  • 页面布局需要友好舒适,符合大众审美。

程序实现步骤

如何实现一个简单的登录窗口,操作步骤如下:

1. 定义一个空白窗口,如下所示:

from tkinter import * # 引入tkinter包
app = Tk()  # 定义一个界面
app.mainloop() # 显示页面

默认情况下,定义的窗口会显示与屏幕左上方,且标题为空,如下所示:

2. 添加标题,并设置页面大小和位置,如下所示:

app = Tk()  # 定义一个界面
app.title(string='Alan.hsiang>>>系统登录')  # 设置标题
app.geometry('400x300+300+400')  # 大小坐标设置格式 =widthxheight+x+y
app.mainloop()

添加标题和设置大小位置后,效果如下所示:

3. 添加页面组成元素

当空页面创建完成后,需要为页面添加元素(用户名,密码,登录按钮等),如下所示:

app = Tk()  # 定义一个界面
app.title(string='Alan.hsiang>>>系统登录')  # 设置标题
app.geometry('400x300+300+400')  # 大小坐标设置格式 =widthxheight+x+y
name_label = Label(master=app, text='用户名')  # Label用于显示文本内容,且用户无法修改
pwd_label = Label(master=app, text='密码') # master 用于表示对象属于哪个容器
name_entry = Entry(master=app)  # 文本框,用户可以进行输入
pwd_entry = Entry(master=app, show='*')  # 密码框,显示密文,以*代替
login_btn = Button(master=app, text='登录') # 登录按钮
name_label.pack(anchor=W) # pack 方式布局,默认为居中 ,一个元素一行 anchor用于设置对齐方式
name_entry.pack(anchor=W)
pwd_label.pack(anchor=W)
pwd_entry.pack(anchor=W)
login_btn.pack(anchor=W)
app.mainloop()

执行结果,如下所示:

4. 变更页面布局方式

默认的pack布局方式,是比较丑的,下面采用grid方式进行布局,如下所示:

name_label.grid(row=0,column=0) # grid 方式布局,通过设置行列的方式布局,从0开始
name_entry.grid(row=0,column=1)
pwd_label.grid(row=1,column=0)
pwd_entry.grid(row=1,column=1)
login_btn.grid(row=2,column=1)

执行结果如下所示:

5. 继续优化布局

通过grid布局后,虽然看起来比较接近,但是元素距离左边太近,且控件之前太拥挤,没有空隙,可以通过设置padx,pady来改变,如下所示:

name_label.grid(row=0, column=0, padx=20, pady=20)  # grid 方式布局,通过设置行列的方式布局,从0开始
name_entry.grid(row=0, column=1)
pwd_label.grid(row=1, column=0)
pwd_entry.grid(row=1, column=1)
login_btn.grid(row=2, column=1, pady=20, stick=E) # stick表示靠哪边对齐,通过N(北)S(南)W(西)E(东)来表示

设置padx,pady后,效果如下所示:

6. 添加事件

当初步完成页面布局后,下面开始完善功能,为按钮添加事件。

通过command属性添加事件,如下所示:

# 因为python是顺序执行,所以login函数定义必须在绑定事件前面
def login():
    name = name_entry.get()
    pwd = pwd_entry.get()
    if name == '' or pwd == '':
        messagebox.showerror(title='错误', message='用户名和密码都不能为空!!!')
    else:
        if name == 'admin' and pwd == '123':
            messagebox.showinfo(title='成功', message='登录成功')
        else:
            messagebox.showerror(title='错误', message='用户名和密码错误!!!')
login_btn = Button(master=app, text='登录', width=8, command=login)  # 登录按钮

执行效果如下:

用户名和密码为空时,点击按钮,提示错误信息

当输入正确的用户名密码时,提示成功,如下树所示:

示例完整代码

整个示例比较简单,属于基础入门知识,代码如下所示:

from tkinter import *  # 引入tkinter包
from tkinter import messagebox  # 引入对话框包
app = Tk()  # 定义一个界面
app.title(string='Alan.hsiang>>>系统登录')  # 设置标题
app.geometry('400x300+300+400')  # 大小坐标设置格式 =widthxheight+x+y
name_label = Label(master=app, text='用户名')  # Label用于显示文本内容,且用户无法修改
pwd_label = Label(master=app, text='密码')  # master 用于表示对象属于哪个容器
name_entry = Entry(master=app)  # 文本框,用户可以进行输入
pwd_entry = Entry(master=app, show='*')  # 密码框,显示密文,以*代替
# 因为python是顺序执行,所以login函数定义必须在绑定事件前面
def login():
    name = name_entry.get()
    pwd = pwd_entry.get()
    if name == '' or pwd == '':
        messagebox.showerror(title='错误', message='用户名和密码都不能为空!!!')
    else:
        if name == 'admin' and pwd == '123':
            messagebox.showinfo(title='成功', message='登录成功')
        else:
            messagebox.showerror(title='错误', message='用户名和密码错误!!!')
login_btn = Button(master=app, text='登录', width=8, command=login)  # 登录按钮
# name_label.pack(anchor=W) # pack 方式布局,默认为居中 ,一个元素一行 anchor用于设置对齐方式
# name_entry.pack(anchor=W)
# pwd_label.pack(anchor=W)
# pwd_entry.pack(anchor=W)
# login_btn.pack(anchor=W)
name_label.grid(row=0, column=0, padx=20, pady=20)  # grid 方式布局,通过设置行列的方式布局,从0开始
name_entry.grid(row=0, column=1)
pwd_label.grid(row=1, column=0)
pwd_entry.grid(row=1, column=1)
login_btn.grid(row=2, column=1, pady=20, stick=E)  # stick表示靠哪边对齐,通过N(北)S(南)W(西)E(东)来表示
# login_btn.bind('<Button-1>', func=login) # 绑定事件
app.mainloop()

关于更多Tkinter相关内容,可以参考菜鸟教程,里面有更详尽的介绍。

备注

临江仙·夜登小阁忆洛中旧游

【作者】陈与义 【朝代】宋

忆昔午桥桥上饮,坐中多是豪英。长沟流月去无声。杏花疏影里,吹笛到天明。

二十余年如一梦,此身虽在堪惊。闲登小阁看新晴。古今多少事,渔唱起三更。

相关文章
|
4月前
|
API C++ 开发者
PySide vs PyQt:Python GUI开发史诗级对决,谁才是王者?
PySide 和 PyQt 是 Python GUI 开发领域的两大利器,各有特色。PySide 采用 LGPL 协议,更灵活;PyQt 默认 GPL,商业使用需授权。两者背后团队实力雄厚,PySide 得到 Qt 官方支持,PyQt 由 Riverbank Computing 打造。API 设计上,PySide 简洁直观,贴近原生 Qt;PyQt 增加 Pythonic 接口,操作更高效。性能方面,两者表现优异,适合不同需求的项目开发。选择时可根据项目特点与开源要求决定。
314 20
|
6月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
3月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
211 33
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
85 1
|
3月前
|
设计模式 安全 Python
Python编程精进:正则表达式
正则表达式是一种强大的文本处理工具,用于搜索、匹配和提取模式。本文介绍了正则表达式的语法基础,如`\d`、`\w`等符号,并通过实例展示其在匹配电子邮件、验证电话号码、处理日期格式等场景中的应用。同时,文章提醒用户注意性能、编码、安全性等问题,避免常见错误,如特殊字符转义不当、量词使用错误等。掌握正则表达式能显著提升文本处理效率,但需结合实际需求谨慎设计模式。
135 2
|
4月前
|
数据采集 安全 BI
用Python编程基础提升工作效率
一、文件处理整明白了,少加两小时班 (敲暖气管子)领导让整理100个Excel表?手都干抽筋儿了?Python就跟铲雪车似的,哗哗给你整利索!
114 11
|
6月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
186 28
|
6月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
6月前
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
6月前
|
Python
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
87 4

热门文章

最新文章

推荐镜像

更多