好看又好用的 GUI,你需要这七个 Python 必备库,
来源 | 法纳斯特
头图 | 下载于ICphoto
GUI(图形用户界面),顾名思义就是用图形的方式,来显示计算机操作的界面,更加方便且直观。与之相对应的则是CUI(命令行用户交互),就是常见的Dos命令行操作,需要记忆一些常用的命令,对于普通人而言,操作起来学习难度还是蛮高的。
一个好看又好用的GUI,可以大大提高大家的使用体验,提高效率。比如你想开发一个计算器,如果只是一个程序输入,输出窗口的话,是没有用户体验的。所以开发一个图像化的小窗口,就变得很有必要。
今天,给大家介绍七个Python必备的GUI库,每一个都值得学习。
PyQt5
PyQt5由Riverbank Computing开发。基于Qt框架构建,是一个跨平台框架,可以给各种平台创建应用程序,包括:Unix、Windows、Mac OS。
PyQt将Qt和Python结合在一起。它不只是一个GUI工具包。还包括了线程,Unicode,正则表达式,SQL数据库,SVG,OpenGL,XML和功能完善的Web浏览器,以及许多丰富的GUI小部件集合。
使用pip安装一下。
# 安装PyQt5
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5
安装成功后,来个Hello Word简单示例。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout# 建立application对象
app = QApplication(sys.argv)
# 建立窗体对象
w = QWidget()
# 设置窗体大小
w.resize(500, 500)# 设置样式
w.layout = QVBoxLayout()
w.label = QLabel("Hello World!")
w.label.setStyleSheet("font-size:25px;margin-left:155px;")
w.setWindowTitle("PyQt5 窗口")
w.layout.addWidget(w.label)
w.setLayout(w.layout)# 显示窗体
w.show()
# 运行程序
sys.exit(app.exec_())
结果如下:
文档地址:
https://riverbankcomputing.com/software/pyqt/intro
教程链接:
https://www.guru99.com/pyqt-tutorial.html
Tkinter
Tkinter是Python中最受欢迎的GUI库之一。由于它简单易学的语法,成为GUI开发初学者的首选之一。
Tkinter提供了各种小部件,例如标签,按钮,文本字段,复选框和滚动按钮等。支持Grid(网格)布局,由于我们的程序大多数都是矩形显示,这样即使是复杂的设计,开发起来也变得简单些。
# 安装tkinter
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tkinter
下面使用Tkinter设计一个BMI计算器,以重量和高度作为输入,并在弹出框中返回BMI系数作为输出。
from tkinter import *
from tkinter import messageboxdef get_height():# 获取身高数据(cm)height = float(ENTRY2.get())return heightdef get_weight():# 获取体重数据(kg)weight = float(ENTRY1.get())return weightdef calculate_bmi():# 计算BMI系数try:height = get_height()weight = get_weight()height = height / 100.0bmi = weight / (height ** 2)except ZeroDivisionError:messagebox.showinfo("提示", "请输入有效的身高数据!!")except ValueError:messagebox.showinfo("提示", "请输入有效的数据!")else:messagebox.showinfo("你的BMI系数是: ", bmi)if __name__ == '__main__':# 实例化object,建立窗口TOPTOP = Tk()TOP.bind("<Return>", calculate_bmi)# 设定窗口的大小(长 * 宽)TOP.geometry("400x400")# 窗口背景颜色TOP.configure(background="#8c52ff")# 窗口标题TOP.title("BMI 计算器")TOP.resizable(width=False, height=False)LABLE = Label(TOP, bg="#8c52ff", fg="#ffffff", text="欢迎使用 BMI 计算器", font=("Helvetica", 15, "bold"), pady=10)LABLE.place(x=55, y=0)LABLE1 = Label(TOP, bg="#ffffff", text="输入体重(单位:kg):", bd=6,font=("Helvetica", 10, "bold"), pady=5)LABLE1.place(x=55, y=60)ENTRY1 = Entry(TOP, bd=8, width=10, font="Roboto 11")ENTRY1.place(x=240, y=60)LABLE2 = Label(TOP, bg="#ffffff", text="输入身高(单位:cm):", bd=6,font=("Helvetica", 10, "bold"), pady=5)LABLE2.place(x=55, y=121)ENTRY2 = Entry(TOP, bd=8, width=10, font="Roboto 11")ENTRY2.place(x=240, y=121)BUTTON = Button(bg="#000000", fg='#ffffff', bd=12, text="BMI", padx=33, pady=10, command=calculate_bmi,font=("Helvetica", 20, "bold"))BUTTON.grid(row=5, column=0, sticky=W)BUTTON.place(x=115, y=250)TOP.mainloop()
界面如下:
当没有数据时,点击BMI按钮,会有与之对应的提示。下面我们使用正确的数据,来看看结果。
使用起来感觉不错。
Kivy
Kivy是另一个开源的Python库,最大的优点就是可以快速地编写移动应用程序(手机)。Kivy可以在不同的平台上运行,包括Windows、Mac OS、Linux、Android、iOS和树莓派。此外它也是免费使用的,获得了MIT许可。
# 安装kivy
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple kivy
一个基于Kivy的Hello World窗口。
from kivy.app import App
from kivy.uix.button import Buttonclass TestApp(App):def build(self):return Button(text=" Hello Kivy World ")TestApp().run()
结果如下:
wxPython
wxPython是一个跨平台GUI的Python库,可轻松创建功能强大稳定的GUI,毕竟是用C++编写的~
目前,支持Windows,Mac OS X,macOS和Linux。使用wxPython创建的应用程序(GUI)在所有平台上都具有原生外观。
# 安装wxPython
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple wxPython
下面使用wxPython创建一个基本的GUI示例。
import wxmyapp = wx.App()
init_frame = wx.Frame(parent=None, title='WxPython 窗口')init_frame.Show()
myapp.MainLoop()
结果如下:
文档链接:https://www.wxpython.org/
PySimpleGUI
PySimpleGUI也是基于Python的GUI框架,可以轻松制作自定义的GUI,采用了四种最流行的GUI框架QT、Tkinter、WxPython和Remi,能够实现大多数样例代码,降低了学习难度。
Remi将应用程序的界面转换为HTML,以便在Web浏览器中呈现。
# 安装PySimpleGUI
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PySimpleGUI
下面是一个简单的案例:
import PySimpleGUI as sglayout = [[sg.Text("测试 PySimpleGUI")], [sg.Button("OK")]]
window = sg.Window("样例", layout)
while True:event, values = window.read()if event == "OK" or event == sg.WIN_CLOSED:break
window.close()
结果如下:
点击OK按钮,窗口消失。
PyGUI
PyGUI是一个以简单API而闻名的GUI框架,减少Python应用与平台底层GUI之间的代码量。轻量级的API,可以让你的应用程序运行起来更流畅,更快速。同时还开源代码,跨平台项目。目前可在基于Unix的系统,Windows和Mac OS上运行,Python2和Python3都支持。
文档地址:
https://www.cosc.canterbury.ac.nz/greg.ewing/python_gui/
教程链接:
https://realpython.com/pysimplegui-python/
Pyforms
Pyforms是用于开发GUI应用程序的一个跨平台框架。
Pyforms是一个Python2.7/3.x跨环境图形应用开发框架,模块化和代码复用可以节省大量工作,允许应用程序在桌面,Web和终端上运行,无需修改代码。
# 安装PyFroms
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyFroms
文档地址:https://pyforms.readthedocs.io/en/v4/
更多精彩推荐
☞阿里研发 AI 黑科技,有望替代人工鉴黄师☞提气!清华成立集成电路学院,专研“卡脖子”技术☞大佬新番:吴恩达送出深度学习新手大礼包☞换脸火了,我用 python 快速入门生成模型点分享点收藏点点赞点在看
相关文章:

总结PHP 7新增加的特性
?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用。用法: $a $_GET[a] ?? 1;它相当于: <?PHP $a isset($_GET[a]) ? $_GET[a] : 1; 我们知道三元运算符是可以这样用的: $a ?: 1但是这是…

谈“云”色变?近80%企业曾遭受数据泄露
出品 | 《大咖来了》 一边是企业上云这一毋庸置疑的发展趋势,但另一边,云数据泄露事件的频繁,却让不少企业谈“云”色变。 2020年2月,万豪酒店520万客人信息被泄露,英国信息专员办公室(ICO)对其进行了1840万英镑(约1.…

C语言的32个关键字
C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。1 数据类型关键字(12个): (1) char :声明字符型变量或函数 (2) double :声…

Python中线程Timeout的使用
Python中关于Timeout有另一种用起来更简便的方法,即使用装饰器。这种方式是使用sys模块的settrace等方法重构了python的threading类:#!/usr/bin/python import threading import sys class KThread(threading.Thread):"""Subclass of thr…
Vue的模板语法学习
模板语法 1、插值 a、文本 数据绑定最常见的形式就是使用 “Mustache” 语法(双大括号)的文本插值 我们在普通插值的时候无论何时,绑定的数据对象上 msg 属性发生了改变,插值处的内容都会更新 【案例】 <div id"app"…

求二维数组中最大子数组的和
任国庆 张博 之前我们讨论了在一维数组中求最大子数组的和,在此基础上我们开始讨论二维数组的最大子数组。 求二维数组的最大子数组思想是建立在以为数组。首先将数组的第一列看成一个一维数组,找到该列的最大子数组的值,然后将第二列与第一…

赠书 | 详解 4 种爬虫技术
作者 | 赵国生 王健来源 | 大数据DT头图 | 下载于视觉中国前言:聚焦网络爬虫是“面向特定主题需求”的一种爬虫程序,而通用网络爬虫则是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分,主要目的是将互联网上…

nginx 通过proxy_next_upstream实现容灾和重复处理问题
proxy_next_upstream指令语法: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 |http_504 |http_404 | off ...; 默认值: proxy_next_upstream error timeout; 上下文: http, server, locationerror # 和后端服务器建立连接时&…

javascript身份证号码验证函数支持带x
//--身份证号码验证-支持新的带x身份证functionisIdCardNo(num) { varfactorArr newArray(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); varerror; varvarArray newArray(); varintValue; varlngProduct 0; varintCheckDigit; varintStrLen num.length; v…

「AI 质检员」在富士通上岗,效率比人工高 25%
日本第一 IT 厂商富士通,于近日宣布开发了用于检测产品外观异常的 AI 技术,从而节省人力成本、材料成本等,同时也可节省声誉损失和退货/召回相关的成本,「无人工厂」已来。来源 | Hyper超神经责编 | 寇雪芹头图 | 下载于视觉中国去…

asp在线压缩和解压缩文件(文件夹)
asp在线压缩和解压缩文件(文件夹) <%\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 1. c:\windows\system32\cmd.exe\\ 拷贝把本文件所在的路径\\\\ 2. 把 c:\program\winrar\rar.exe\\ 拷贝把本文件所在的路径 并改名为WinRAR.e…

SpringMVC + Hibernate-Validator 参数校验
2019独角兽企业重金招聘Python工程师标准>>> 前言: Web开发中,最为常见的场景就是前端表单数据、Json数据与后端实体类的绑定,即使JS能校验并阻止大部分的必填漏填的风险,但并不能防止恶意破坏者修改脚本。因此后端参数…

深入浅出,机器学习该怎么入门?
来源 | 算法进阶责编 | 寇雪芹头图 | 下载于视觉中国前言:机器学习作为人工智能领域的核心组成,是计算机程序学习数据经验以优化自身算法,并产生相应的“智能化的”建议与决策的过程。一个经典的机器学习的定义是:A computer prog…

防止SQL注入式攻击
1将sql中使用的一些特殊符号,如 -- /* ; %等用Replace()过滤;2限制文本框输入字符的长度;3检查用户输入的合法性;客户端与服务器端都要执行,可以使用正则。4使用带参数的SQL语句形式。 尽量用存储过程

js中document.write的那点事
document.write()方法可以用在两个方面:页面载入过程中用实时脚本创建页面内容,以及用延时脚本创建本窗口或新窗口的内容。该方法需要一个字符串参数,它是写到窗口或框架中的HTML内容。这些字符串参数可以是变量或值为字符串的表达式…

SVN提示被锁定的解决方法(转)
1、(常用)出现这个问题后使用“清理”即"Clean up"功能,如果还不行,就直接到上一级目录,再执行“清理”,然后再“更新”。 2、(没试过)有时候如果看到某个包里面的文件夹没…

征集佳句-精妙SQL语句收集
征集佳句-精妙SQL语句收集 SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作,方便自己写SQL时方便一点,想贴上来,一起看看,同时希望大家能共同多多提意见,也给我…

【WP8】ResourceDictionary
WP8中引用资源字典 当我们定义的样式太多的时候,我们可以把样式分别定义在不同的文件中,然后通过 MergedDictionaries 应用到其他资源字典中,看下面Demo 我们可以把样式定义在多个文件中,然后再App.xaml中引用 我们先定义三个文件…

拿来就能用! CTO 创业技术栈指南!
作者 | Nitin Aggarwal译者 | 弯月出品 | CSDN(ID:CSDNnews)随着开发运维概念的诞生,以及“You build it, you run it.”(谁构建,谁运维)理念的盛行,现代创业公司的技术栈也发生了许…

Go处理百万每分钟的请求
2019独角兽企业重金招聘Python工程师标准>>> I have been working in the anti-spam, anti-virus and anti-malware industry for over 15 years at a few different companies, and now I know how complex these systems could end up being due to the massive a…

data pump工具
expdp和impdp的用法ORCALE10G提供了新的导入导出工具,数据泵。Oracle官方对此的形容是:OracleDataPump technology enables Very High-Speed movement of data and metadata from one database to another.其中Very High-Speed是亮点。先说数据泵提供的主…

游标对于分页存储过程
1。我个人认为最好的分页方法是: Select top 10 * from table where id>200写成存储过程,上面的语句要拼一下sql语句,要获得最后大于的哪一个ID号 2。那个用游标的方式,只适合于小数据量的表,如果表在一万行以上,就差劲了 你的存储过程还比不上NOT IN分页,示例: SELECT …

混沌、无序、变局?探索之中,《拟合》开启
从无序中寻找踪迹,从眼前事探索未来在东方的神话里,喜鹊会搭桥,银河是条河,两端闪耀的牵牛星和织女星,则是一年一相会的佳偶,他们彼此间的惦念,会牵引彼此在七夕那天实现双星聚首。在西方的世界…

linxu 下安装mysql5.7.19
2019独角兽企业重金招聘Python工程师标准>>> 1、首先检查是否已经安装过mysql,查找mysql相关软件rpm包 # rpm -qa | grep mysql 2、将所有与mysql相关的东西删除 #yum -y remove mysql-libs-5.1.66-2.el6_3.x86_64 3、安装依赖包 #yum -y install make gcc-c cmake …

C#技术内幕 学习笔记
引用类型是类型安全的指针,它们的内存是分配在堆(保存指针地址)上的。String、数组、类、接口和委托都是引用类型。 强制类型转换与as类型转换的区别:当类型转换非法时,强制类型转换将抛出一个System.InvalidCastExce…
java的深度克隆
原文:http://blog.csdn.net/randyjiawenjie/article/details/7563323javaobjectinterfacestringclassexception先做个标记 http://www.iteye.com/topic/182772 http://www.blogjava.net/jerry-zhaoj/archive/2009/10/14/298141.html 关于super.clone的理解 http://h…

持续推进预估时间问题研究,滴滴盖亚计划开放ETA数据集
4月29日消息,为持续推进行程时长预估问题研究,滴滴联合GIS(地理信息系统)领域国际顶会ACM SIGSPATIAL发布ACM SIGSPATIAL GISCUP 2021比赛,鼓励研究者们基于滴滴新开放的行程时长数据集,进一步提升时间预估准确性。 预估到达时间…

3.Java集合-HashSet实现原理及源码分析
一、HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持,它不保证set的迭代顺序很久不变。此类允许使用null元素 二、HashSet的实现: 对于HashSet而言,它是基于HashMap实现…

一个函数返回多个值
有两种方法:1.使用指针变量声明函数(或者使用数组变量)2.使用传出参数 第一种方法:函数返回的是一个指针地址(数组地址),这个内存地址有多个变量寄存在里面。这个方法我不太会用,传…

4月30日或为上半年“最难打车日”
滴滴出行昨日发布预测,称由于周五通勤晚高峰及假期启程高峰叠加,4月30日下午或将成为今年上半年“最难打车日”,用户将遇到叫车排队甚至打不到车的情况。滴滴呼吁,请提前规划行程,预留充足时间,大家五一快乐…