PYTHON实践——GUI界面
摘 要
基于easygui,Wordcloud等一系列库的GUI界面,主要是针对学生信息进行录入、查找和反馈问题,以及词云的生成。同时,每个界面均有多个选项,便于使用者选择,让GUI界面较为人性化,可操作性强。
1实践选题及目标 1
2实践开发环境 4
3实践步骤 7
4关键代码 17
5实践结果与分析 31
6实践体会 31
正文
- 实践选题及目标
选题:学生成绩录入、查找和读取以及词云的生成
目标:用easygui和Wordcloud等库实现了对学生信息录入,登陆账号查询信息,以及调用信息并反馈问题,还有用词云可视化TXT文本里的文字。此外,基本每个界面均有多个选项,便于使用者操作,让GUI界面更为人性化,可操作性强。另外,依据本人设想,可以躲设一个界面专门用来向TXT文本中传输信息,便于后面的词云生成,可惜因为时间紧迫,暂时没能实现。
- 实践开发环境
应用软件Pycharm,使用编译器 ,使用的库有(如下图)
- 实践步骤
首先是确定选题,这次老师一共给了4个选题,我选了一个从来没听说过的GUI界面,我想这样比较有趣。
第二步确定具体的项目方向,我发现对大量数据的录入、查找以及调用可以采用这样的界面进行,于是就制作了这样一个学生信息的GUI界面。
- 关键代码
import easygui as g
import sys
class easyDemo:
def guifun(self):
loginStatus = False
g.msgbox(msg="欢迎使用,请先使用学生账号登陆~~ \n\n\n\n\n\n\n\n\n\n\n\n如有问题,请联系xxx",title="学生信息",image=r"C:\Users\gby20020923\Desktop\动图2.gif")
while not loginStatus:
mulRes = g.multpasswordbox('请输入您的账号密码', '登录框', ('帐号', '密码'))
if mulRes is None:
sys.exit(0)
if mulRes[0] == '' or mulRes[1] == '':
g.msgbox('请输入完整的账号密码', ok_button="确定", title="提醒")
continue
account = mulRes[0]
password = mulRes[1]
#拿着账号密码验权
if account == 'GBY' and password == '020923':
g.msgbox('帐号: ' + account + '登陆成功', ok_button="下一步",title="登陆结果")
loginStatus = True
else:
g.msgbox('帐号: ' + account + '登陆失败', ok_button="重新登陆")
userName = 'user'
# g.msgbox("显示一个窗口并且显示这些文字")# 只显示一个对话框并且只有一个ok
msg= userName + "欢迎使用,请选择你要做的事情?"
title="学生信息" # 在左上角的 标题旷里面
choices=['打印学生信息','查询学生信息','查看详情','帮助'] # 在选择框内 , 提供可选择项
choice=g.choicebox(msg,title,choices) # 在这里 choice 可以得到上面你选择的那个选项
if choice is None:
sys.exit(0)
g.msgbox("你的选择是:"+str(choice),title="学生信息",ok_button="下一步") # 打印出来
if choice == '查询学生信息':
viewType = ['查看全部', '未打印信息', '单人信息']
viewChose = g.choicebox(msg='请选择你要查询的信息', choices=viewType, title="学生信息")
if viewChose is None:
sys.exit(0)
if viewChose == '单人信息':
# 输入商品编号
goodCode = g.enterbox('请输入学生编号:', title='学生信息')
if goodCode:
g.msgbox("正在搜索:" + str(goodCode), '结果', ok_button="下一步") # 打印出来
mutiSelect = g.choicebox(msg='搜索结果', choices=[goodCode], title='学生信息')
else:
# 获取 列表内容
# 这里demo 就用一些测试数据
vedio_list = [1, 2, 3, 4, 5]
mutiSelect = g.multchoicebox(msg='请勾选您要查询的学生信息 ', choices=vedio_list, title="学生信息")
if mutiSelect is None:
sys.exit(0)
msgRes = g.msgbox('请选择文件夹保存路径', ok_button="下一步", title="学生信息")
if msgRes is None:
g.msgbox('未选择,查找失败', ok_button="完成", title="学生信息")
sys.exit(0)
if choice == '打印学生信息':
viewType = ['打印单人信息', '打印多人信息', '打印未打印信息']
viewChose = g.choicebox(msg='请选择你要打印的信息', choices=viewType, title="学生信息")
if viewChose is None:
sys.exit(0)
if viewChose == '单人信息':
# 输入商品编号
goodCode = g.enterbox('请输入学生编号:', title='学生信息')
if goodCode:
g.msgbox("正在搜索:" + str(goodCode), '结果', ok_button="下一步") # 打印出来
mutiSelect = g.choicebox(msg='搜索结果', choices=[goodCode], title='学生信息')
else:
# 获取 列表内容
# 这里demo 就用一些测试数据
vedio_list = [1, 2, 3, 4, 5]
mutiSelect = g.multchoicebox(msg='请勾选您要打印的学生信息 ', choices=vedio_list, title="学生信息")
if mutiSelect is None:
sys.exit(0)
msgRes = g.msgbox('请选择文件夹保存路径', ok_button="下一步", title="学生信息")
if msgRes is None:
g.msgbox('未选择,查找失败', ok_button="完成", title="学生信息")
sys.exit(0)
if choice == '帮助':
viewType = ['查询学生信息失败', '学生数据缺失或错误', '信息反馈']
viewChose = g.choicebox(msg='请选择你要解决的问题', choices=viewType, title="学生信息")
if viewChose is None:
sys.exit(0)
if viewChose == '查询学生信息失败':
# 输入商品编号
goodCode = g.enterbox('请输入学生编号:', title='学生信息')
if goodCode:
g.msgbox("正在搜索:" + str(goodCode), '结果', ok_button="下一步") # 打印出来
mutiSelect = g.choicebox(msg='搜索结果', choices=[goodCode], title='学生信息')
if viewChose=='信息反馈':
mulRes = g.multpasswordbox('请输入您的问题', '登录框', ('您的账号是:','您的反馈信息为:'))
else:
# 获取 列表内容
# 这里demo 就用一些测试数据
vedio_list = [1, 2, 3, 4, 5]
mutiSelect = g.multchoicebox(msg='请勾选您查询报错学生信息 ', choices=vedio_list, title="学生信息")
if mutiSelect is None:
sys.exit(0)
else :
viewType = ['学生学号汇总', '学生院系汇总', '学生入学时间汇总']
viewChose = g.choicebox(msg='请选择你要的信息汇总', choices=viewType, title="学生信息")
if viewChose is None:
sys.exit(0)
if viewChose == '学生学号汇总':
mulRes = g.multpasswordbox('请输入您要查找的学号', '登录框', ('您的账号为:','学号为:'))
if viewChose == '学生院系汇总':
mulRes = g.multpasswordbox('请输入您要查找的院系', '登录框', ('您的账号为:','院系为:'))
if viewChose == '学生入学时间汇总':
mulRes = g.multpasswordbox('请输入您要查找的入学时间', '登录框', ('您的账号为:','入学时间为:'))
dir_path = g.diropenbox()
print(dir_path)
## 后续操作
import easygui as t
message = ['学号', '姓名','性别','年龄','院系','入学时间']
for x in range(2) :
s = student = t.multenterbox('输入学生的信息:', '信息录入', message)
print(s)
from os import path
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
text = ''
with open(r'C:\Users\gby20020923\Desktop\新建文本文档.txt', 'r', encoding='utf8') as fin:
for line in fin.readlines():
line = line.strip('\n')
# sep’.join(seq)以sep作为分隔符,将seq所有的元素合并成一个新的字符串
text += ' '.join(jieba.cut(line))
backgroud_Image = plt.imread(r'C:\Users\gby20020923\Desktop\动图5.webp')
wc = WordCloud(
background_color='white',# 设置背景颜色
mask=backgroud_Image,# 设置背景图片
font_path='C:\Windows\Fonts\STZHONGS.TTF', # 若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
max_words=2000, # 设置最大现实的字数
stopwords=STOPWORDS,# 设置停用词
max_font_size=200,# 设置字体最大值
random_state=30# 设置有多少种随机生成状态,即有多少种配色方案
)
wc.generate_from_text(text)
print('开始加载文本')
#改变字体颜色
img_colors = ImageColorGenerator(backgroud_Image)
#字体颜色为背景图片的颜色
wc.recolor(color_func=img_colors)
# 显示词云图
plt.imshow(wc)
# 是否显示x轴、y轴下标
plt.axis('off')
plt.show()
# 获得模块所在的路径的
d = path.dirname(__file__)
# os.path.join(): 将多个路径组合后返回
wc.to_file(path.join(d,r"C:\Users\gby20020923\Desktop\动图3.webp"))
print('生成词云成功!')
if __name__ == '__main__':
S = easyDemo()
S.guifun()
- 实践结果与分析
这个GUI界面是输入学生的个人数据,然后导入合并到一张表上,从而便于后面的处理和调用,并且积累的多了也相当于一个数据库。同时,为了让学生信息可以不断录入,我加了一个循环,除非输入结束语句,将一直输入进去,这样就避免了代码重复,而且想要录入几次信息就可以录入几次,非常的简便易操作。
这个是我输入信息的样例,当然可以根据实际情况进行调整。
这个是学生信息查询和维护的主页,为了让这个页面看起来美观一点,所以我采用了gif动图,这个使得首页更加像模像样。另外这个界面上的配字是为了提示使用者用学生账号登录并对其使用表示欢迎以及提供了出现问题的解决办法(联系某某人)。
点击首页的OK键便进入了上面的登录框,因为我设定了初始账号和代码,因此只要输入正确的账号和密码就能成功登陆。
此图为我预设的账号和密码输入,此时再点击OK键就能成功登陆了。
这个就是登陆成功显示的界面,这时可以点击“下一步”进入接下去的界面。
上图就是进入学生信息系统以后的界面了,我们可以看到界面提供了四个选项:打印学生信息、查询学生信息、查看详情、帮助。我们可以任选一个进入下一个界面。
如果选择的是第一个打印学生信息,将会弹出上图界面。同样点击下一步就会进入下面的界面。
进入打印学生信息这个选项以后,界面提供给我们三个选项:查看全部、未打印信息以及单人信息。这样就能基本满足使用者的需求,想要查看全部或者单人信息都可以,此外还能知道谁的信息没有打印,从而节省时间也节约了打印的成本。
上图为选择了查看全部信息的界面,在此页面我们可以选中或者清空已有数据。
任意点开一个学生序号,就会出现上述界面。然后下一步进入下一界面。
然后就进入了上述界面,可以选择一个合适的文件,进行数据存储与调用。 如果没有想要查找的学生信息就会出现上图界面——“查找失败”。
如果没有想要查找的学生信息就会出现上图界面——“查找失败”。
如果选择的是查询学生信息,就会出现下图界面。
出现此界面就可以进行接下去的查找工作。其他的也一样,下面为一些运行截图。
如果选择帮助,则会出现查询学生信息失败,学生数据缺失或错误以及信息反馈。
选择其中一个将会进行后续的界面。
如果选择信息反馈,将会出现上述界面。
如上图这种输入账号和密码将会显示下图界面。
如果一开始输入的账号不正确,就会出现上述界面,显示登录失败的消息。
这个是Wordcloud对TXT文本的生成图,这个TXT文本的文字是我预设的,如果后期想要生成不一样的,可以直接导入该TXT文件,或者与其他文件创建新的连接,就可以生成别的词云。
- 实践体会
这次的GUI界面的项目,虽然程序较少,但是还是得到了较好的应用效果,在我看来GUI界面适合人机交互,可以让我们更好得进行信息的录入与读取。另外,也让我明白了以前看起来那么遥远的各类操作界面以及网页其实没我想的那么艰难,只是他们在构图以及排布方面比我们现在所能完成的要成熟且复杂,另外操作功能也相对更为全面和繁复,当然他们背后支撑的代码也自然是更为宏大。
在这次GUI界面中我也尝试加入图片,让界面更加美观,经过个人摸索发现只有JPG可以插入,其他的就会报错。另外,最后插入的词云功能,一开始因为我电脑上有好几个python编译器就怎么也不能成功调用库,后来删了多余的python还进行一系列操作才能平稳运转。而词云一开始不能识别中文,也是重新下载了字体并把字体放到合适的路径下才得以使python正确识别文件中的中文。由此可见,python对文件和图片的格式还是较为严格的,尤其对中文,就只能识别它所规定的字体,而且文字也仅仅能够识别TXT中的,Word文档里的Wordcloud功能调用不了,我想这些可以通过对Wordcloud的修改和扩充来实现。
当然,这次编程修改代码的过程是漫长而痛苦的,但是当一个个报错被解决的时候,我的内心是愉悦的,而且在这过程我也学会了不少python知识,对pycharm的功能更加了解,而且对软硬件也有了进一步了解。
我想随着时间的沉淀,当我的代码储备足够大的时候,我也能够去创建那样的精美的网页,并把自己的构想一一付诸于行动。但是,在此之前我要打好编程基础,要勤于练习,在大好的年华里不能安于享乐,只有这样才能有能力完成编程项目。
PYTHON实践——GUI界面相关推荐
- python中的gui界面编程_python应用系列教程——python的GUI界面编程Tkinter全解
全栈工程师开发手册 (作者:栾鹏) python的GUI界面编程,常用的几个python库包含如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包 ...
- Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)
Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...
- python界面开发 web_使用 web 技术构建 python 的 GUI 界面
一般来说,选择用于应用程序的 GUI 工具箱会是一个棘手的事情,Python 也不例外.对于 Python 来说,可以选择的工具箱种类繁多.就我所知道的而言,比较常用的就有 TkInter, wxPy ...
- python应用系列教程——python的GUI界面编程Tkinter全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python的GUI界面编程,常用的几个python库包含如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 ...
- Python的GUI界面编程Tkinter全解
python的GUI界面编程,常用的几个python库包含如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter可 ...
- python的gui界面 可视化_使用可视化设计窗体的GUI程序
示例Demo2_1用PyQt5的一些类创建了一个简单的GUI应用程序,窗体及窗体上的标签对象的创建和属性设置都完全由代码完成.显然这种纯代码方式构造UI的方式是比较麻烦的,特别是在窗体上组件比较多.层 ...
- Python+appium+GUI界面pyside2微信自动加好友(改问候语、备注、标签)
目录 一.项目背景 二.实现功能 三.具体实现代码 四.支持与合作 一.项目背景 首先,这是我的第一篇文章,写作功底有待提高,后续有时间我会对代码细节的讲解进行完善. 闲暇中,帮助朋友的初创公司开发了 ...
- python的gui界面文件管理_【Python】学生信息管理系统_开发(GUI界面)
学生信息管理系统的开发 模块: 1. 系统登录界面 --> logingui.py 2. 系统主界面 --> maingui.py 3. 学生明细界面 --> ...
- 景点门票销售管理系统 基于 python实现gui界面 之 笔记
1.建立数据库.建表.加外键约束.建触发器 此处106行 CREATE DATABASE IF NOT EXISTS `景点门票销售管理系统` DEFAULT CHARACTER SET utf8;U ...
最新文章
- Java调用python脚本
- Linux oracle数据库自动备份自动压缩脚本代码
- Sublime3安装过程及常用插件安装及常用快捷键
- oracle备份还原到本地_Oracle 11g R2 RAC数据库备份通过RMAN恢复到单实例数据库实现...
- C语言实现线性动态(单向)链表【详细步骤】
- java图片转换pdf_Java实现图片转换PDF文件的示例代码
- 修改VSCode中.exe文件的生成位置(亲测有效)
- 新零售凶猛!瑞幸B轮融资估值翻倍,背后是同城物流的暗战
- 前端研习录(02)——CSS内联样式、内部样式及外部样式
- 跟我一起玩转A870省电内核、超频内核
- 论文中 一级标题、二级标题等 对应格式的统一修改
- 远程控制工具哪个好?向日葵VS ToDesk,安卓移动设备远程操控哪个更好用?
- python+mysql逆向_Python js逆向 爬取X天下数据,好好看,好好学
- mysql查询语句ppt_mysql简单查询.ppt
- 软考信息系统项目管理师(高项),论文该怎么准备?
- 侯捷C++系统工程师
- 弹性响应蒸馏 | 用弹性响应蒸馏克服增量目标检测中的灾难性遗忘
- laydate日期控件修改去除秒保留时分
- 「Section 4」定点数的乘除法实现
- 粒子群算法应用于重心法选址问题-基于MATLAB实现