python桌面图形_Python桌面图形程序美化的方法论
很多人都吐槽,使用 Tkinter、PyQt5等工具制作出来的图形界面程序太丑了。既然觉得它丑,我们来想想,它为什么会那么丑。
功能性是开发的第一要务
每一个 Python 图形界面库都有它自有的功能特性和界面特性。一般来说,这些库的开发者着重要考虑的是功能性的实现。比如、列表框、拖拽框、悬浮框、自定义控件、webview等。
一个图形界面库,受不受开发者的欢迎,首先在于它提供的功能是否全面和强大。
如果仅仅是炫酷和好看,如果功能上有所缺失,其应用也只能在小范围和特定领域内得到拥簇。会导致一种“初遇时惊艳,永久后坑多”的状态。
模块提供的都是原生组件
为了便于理解,我们在这里把桌面图形界面的开发(以PyQt5为例)和Web前端开发进行一下不严谨的关联对应。
PyQt5 中的各种控件(QPushButton、QLineEdit、QCheckBox等)对应于 HTML 中的各类元素标签(、、),用于基础结构的编排。
PyQt5 中的 QSS 对应于 HTML 中的 CSS,用于对样式的控件。
PyQt5 中的信号槽 对应于 HTML 中的 JavaScript,用于对行为交互的控制。
在不引入任何 CSS 和 JavaScript 的情况下,HTML 中编写的任何标签,在浏览器中显示的都是最原始的形状和样式。州的先生
type="text"placeholder="表单输入框"/>
一个按钮
一个选项
两个选项
上述 HTML 代码在浏览器中将会显示为如下图所示:
是不是也是很丑不美观?那就对了。没有经过样式定义的 HTML 标签元素就是这样丑。
而现代Web开发中,几乎所有页面的元素标签都是依照设计原型,引用 UI 组件或自写CSS,对界面的外观进行美化的。
下图是比较知名的前端 UI 库 ElementUI 提供的按钮组件:
通过审查元素,可以看到,其用 CSS 对按钮元素进行了很多改造:
同理,在 Python 的图形界面开发中,我们仅仅是使用了库提供的原生控件和布局,将一个图形界面元素的基础框架构建出来了,并没有对其样式进行任何美化和修饰。这样编写出来的图形界面程序,肯定会让人觉得丑。
界面的美化的几个关键点
通过上面对 Web 页面的对应,我们知道了我们编写的图形界面程序为什么不美观。
如何解决,州的先生根据实际经验给出如下的建议:
有一个好的设计原型
不是要大家去兼修 UI 设计,而是在构建一个图形界面之前,对程序的布局,结构有一个清晰明确的原型。就算是使用网格布局,也应该设计好各个控件在网格的位置和距离。
在有原型之后,可以参考一下现有的消费端桌面软件(QQ音乐之类的)或者上站酷之类的设计网站上看看专业 UI 设计师作品的样式和色彩搭配。
在这里,色彩搭配是一个雷区。好的色彩搭配让程序界面赏心悦目,差的色彩搭配,让人觉得粗制滥造。
充分利用QSS
Qt 提供了 QSS 这个特性让开发者可以自定义小部件的外观,其支持各种属性、子状态和控件。
充分利用好 QSS 来配置界面,图形界面的美化工作可以完成 80% 到 90%。
QSS 支持很多种控件进行配置,由于列表过长,在此就不一一列举出来。贴出 Qt 官方文档中关于 Qt Style Sheets Reference 的链接,大家可以在上面查看:
https://doc.qt.io/qt-5/stylesheet-reference.html
同时,Qt 官方文档中还提供了很多控件使用 QSS 美化的示例,大家也可以参考一下,链接为:
https://doc.qt.io/qtforpython/overviews/stylesheet-examples.html
利用控件的自有属性
QSS 能够完成 80% 到 90% 的界面美化工作,但是还有 10% 到 20% 的场景,QSS 表示心有余而力不足。
什么场景呢?比如窗口边框的处理、窗口默认三剑客(最小化、最大化、关闭)的处理。
面对这一类的处理,就得利用各个控件的自有属性来配置了。如果知道控件的自有属性有哪些呢?答案当然还是看文档。在此个例子:
QProgressBar()是进度栏控件,它的默认样式如下图所示:
我们在官方文档中可以看到它有如下的方法可供调用:
显然,那几个set开头的方法,就是可以直接对控件进行配置的方法:setAlignment():用于设置进度条的对其方式;
setFormat():用于设置进度条的文本格式;
setInvertedAppearance():用于设计进度条是否反转增长;
setMaximum():用于设置进度条的最大值;
setMinimum():用于设置进度条的最小值;
setOrientation():用于设置进度条的布局,是水平还是垂直;
这样,通过控件的自有属性,我们可以对控件的那些QSS无法处理的基础样式进行自定义。
总而言之,需要多翻阅文档。
最后,用一个 PyQt5 美化的音乐播放器界面镇文,希望大家编写的图形界面程序都德艺双馨,秀外慧中。
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:(1)点击页面最上方“小詹学Python”,进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
python桌面图形_Python桌面图形程序美化的方法论相关推荐
- Python桌面图形程序美化的方法论
很多人都吐槽,使用 Tkinter.PyQt5等工具制作出来的图形界面程序太丑了.既然觉得它丑,我们来想想,它为什么会那么丑. 功能性是开发的第一要务 每一个 Python 图形界面库都有它自有的功能 ...
- python写炒股软件_Python桌面股票工具
微信图片_20190725142216.png 开发一个桌面显示股票.可转债.ETF行情信息的桌面工具,这样你再也不用一直拿着手机不放了. 需要用到的python库: tkinter 绘制界面 req ...
- python图像分类整理_python常见图形代码可视化大全整理(包括动图)更新中...
内容持续更新中- 警告信息和可视化时中文和负号的正常显示 import matplotlib as mpl import matplotlib.pyplot as plt import warning ...
- 用python绘制图形_python绘制图形
1 ''' 2 File Name: draw3 Author: tim4 Date: 2018/8/15 16:475 Description: 图形绘制.十分有用,对于工作中实验性的项目,可以快速 ...
- python立体图形_Python 立体图形的画法(一)
1.条形图的立体画法import random import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt ...
- omni rpc python生成地址_python编辑图形界面单一功能MAC随机地址生成
随便改,单一功能,很好改,可以自己扩展需要随机密码,随机用户名,随机EMAIL名,随机随机~ # -*- coding: utf-8 -*-#@copyright python36from PyQt5 ...
- python绘制蟒蛇_Python基本图形绘制——蟒蛇绘制
import turtle #引用turtle库 turtle.setup(650,350,200,200) #画布空间 turtle.setup(width.heigh,starx.stary) t ...
- python 路径格式化_Python Black 一键格式化美化代码
复制别人的代码进行使用的时候,最烦的就是看到编辑器上显示的各种红色的.橙色的线吧?尤其是那些不遵守PEP8规则的代码,等号两边的空格会加到你手软...真希望哪天全世界写Python的小伙伴们都能统一代 ...
- python 制作抽奖_python制作抽奖程序代码详解
实现制作抽奖程序,需要认知到我们可以看到一般抽奖程序界面上是有很多按钮的,比如中奖区域,按键开始区域等等,所以我们先要设置界面,然后把这些按钮添加到界面中去,想必这对于学过tkinter的同学应该不难 ...
最新文章
- SAP HUM针对HU做货物移动后生成的物料凭证何处看相关的HU信息?
- 框架应用 : Spring - 开发详述
- leetcode算法题--一周中的第几天
- Linux下如何查看系统启动时间和运行时间
- iOS Airplay Screen Mirroring 同屏技术详解
- http://jackielieu.blog.51cto.com/5586910/1161944
- 封装html ui 控件,聊聊前端 UI 组件:组件设计
- C#设置系统日期时间格式
- 安全是什么意思_屈老师小班安全教案《安全标志》
- python 空格字符的表示_python字符串怎么去空格
- ​四周第一次课(4月11日)lvm讲解
- sicily 1443 Printer Queue
- 企业为什么要做高端网站优化呢?
- Java版实现一个简单的电话簿
- 中国人在发表英文论文时汉字姓名究竟应该如何写?
- 08.音频系统:第004课_Android音频系统详解:第001节_分析思路
- leetcode 14天刷题计划-数据结构入门(共计33题)
- 网络流量分析——NPMD关注IT运维、识别宕机和运行不佳进行性能优化。智能化分析是关键-主动发现业务运行异常。科来做APT相关的安全分析...
- Zabbix使用LLD自动发现规则发现监控docker容器(下)
- 三天快速制作易语言防破解网络验证注册码系统
热门文章
- Android应用性能优化之使用SparseArray替代HashMap(转)
- arcgis Manager 登陆时提示Incorrect login Information
- Docker管理面板Portainer中文汉化教程
- 【收藏】解决关闭Hadoop时no namenode to stop异常
- spark on yarn参数: 任务优先级
- docker,containerd,runc,docker-shim之间的关系
- GIS基本知识学习PDF文档
- 【视频】vue指令之v-if、v-bind
- 请谈一下Spring MVC的工作原理是怎样的?
- JDBC的CRUD操作之PreparedStatement的删除操作