PythonGUI教程(十六):在PyQt5中美化和装扮图形界面

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

2020.05.22

在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言。其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式,以达到美化图形界面的目的。

首先上效果图:

使用到的图片素材有9张音乐的封面图片:

在图像界面编程中,一个好的布局有助于全局把控界面的形态,而在PyQt5中,有多种布局的方式供我们选择,比较常用的布局有以下几种:

每种布局都有自己对布局内小部件的控制方式和特点,在此我们选择网格布局作为本次图形界面布局的方案。

在网格布局内,使用两个QWidget()部件分别作为左侧菜单模块的部件和右侧内容模块的部件。所以这个图形界面的最基本结构代码如下所示:

空空荡荡,下面我们就开始往里面填充小部件。

在左侧菜单模块中,继续使用网格对部件进行布局。在左侧菜单的布局中添加按钮部件QPushButton()左侧菜单的按钮、菜单列提示和整个窗口的最小化和关闭按钮。

在MainUi()类的init_ui()方法中,使用如下代码实例化创建按钮:

self.left_layout.addWidget(self.left_mini,0,0,1,1)self.left_layout.addWidget(self.left_close,0,2,1,1)self.left_layout.addWidget(self.left_visit,0,1,1,1)self.left_layout.addWidget(self.left_label_1,1,0,1,3)self.left_layout.addWidget(self.left_button_1,2,0,1,3)self.left_layout.addWidget(self.left_button_2,3,0,1,3)self.left_layout.addWidget(self.left_button_3,4,0,1,3)self.left_layout.addWidget(self.left_label_2,5,0,1,3)self.left_layout.addWidget(self.left_button_4,6,0,1,3)self.left_layout.addWidget(self.left_button_5,7,0,1,3)self.left_layout.addWidget(self.left_button_6,8,0,1,3)self.left_layout.addWidget(self.left_label_3,9,0,1,3)self.left_layout.addWidget(self.left_button_7,10,0,1,3)self.left_layout.addWidget(self.left_button_8,11,0,1,3)self.left_layout.addWidget(self.left_button_9,12,0,1,3)继续运行程序代码,呈现出来的图形界面如下图所示:

虽然很丑,但是基本的模型是显示出来了,这里先不作美化,先把完整的结构搭建出来。下面开始右侧部件的搭建。

在右侧内容模块中,有以下几个主要内容模块:

在搜索模块中,有一个文本和一个搜索框,我们通过QLable()部件和QLineEdit()部件来实现,这两个部件同时包裹在一个网格布局的QWidget()部件,分列第一列和第二列,其代码如下所示:

self.right_bar_widget=QtWidgets.QWidget()#右侧顶部搜索框部件self.right_bar_layout=QtWidgets.QGridLayout()#右侧顶部搜索框网格布局self.right_bar_widget.setLayout(self.right_bar_layout)self.search_icon=QtWidgets.QLabel(chr(0xf002)+''+'搜索')self.search_icon.setFont(qtawesome.font('fa',16))self.right_bar_widget_search_input=QtWidgets.QLineEdit()self.right_bar_widget_search_input.setPlaceholderText("输入歌手、歌曲或用户,回车进行搜索")self.right_bar_layout.addWidget(self.search_icon,0,0,1,1)self.right_bar_layout.addWidget(self.right_bar_widget_search_input,0,1,1,8)self.right_layout.addWidget(self.right_bar_widget,0,0,1,9)运行程序代码,其呈现的图形界面如下图所示:

然后是推荐音乐模块,在推荐音乐模块中,有一个推荐的标题,和一个横向排列的音乐封面列表,在这里:

所以,其代码为:

接着创建音乐列表模块和音乐歌单模块。音乐列表模块和音乐歌单模块都有一个标题和一个小部件来容纳具体的内容。

其中标题我们都使用QLabel()部件来实现,而音乐列表我们使用网格布局的QWidget()部件下包裹着数个QPushButton()按钮部件来实现,音乐歌单列表则使用网格布局的QWidget()部件下包裹着数个QToolButton()工具按钮部件来实现。

音乐列表的具体代码如下所示:

self.right_layout.addWidget(self.right_newsong_lable,4,0,1,5)self.right_layout.addWidget(self.right_playlist_lable,4,5,1,4)self.right_layout.addWidget(self.right_newsong_widget,5,0,1,5)self.right_layout.addWidget(self.right_playlist_widget,5,5,1,4)继续运行程序代码,显示出来的图形界面如下图所示:

这样,基本上能够看得出来图形界面的模样了,还差最后的音乐播放进度条和音乐播放控制按钮组。

音乐播放进度条我们使用QProgressBar()进度条部件来实现,音乐播放控制按钮组则使用一个QWidget()部件下包裹着三个QPushButton()按钮部件来实现。

其具体代码如下:

完成了基本的图形界面小部件的搭建,接下来,我们可以对这个图形界面进行一下美化了,因为现在的这个样子实在是很丑陋很不好看。

QSS全称为QtStyleSheet,是用来控制QT控件的样式表。其和Web前段开发中的CSS样式表类似,接下来,我们就通过QSS来对上面创建好的图形界面进行美化。

首先从左侧的菜单栏开始。

左侧的最顶端是三个窗口控制按钮,我们需要将其设置为小圆点的形式。首先,我们使用QPushButton()的setFixedSize()方法,设置按钮的大小:

self.left_close.setFixedSize(15,15)#设置关闭按钮的大小self.left_visit.setFixedSize(15,15)#设置按钮大小self.left_mini.setFixedSize(15,15)#设置最小化按钮大小然后,通过setStyleSheet()方法,设置按钮部件的QSS样式,在这里,左侧按钮默认为淡绿色,鼠标悬浮时为深绿色;中间按钮默认为淡黄色,鼠标悬浮时为深黄色;右侧按钮默认为浅红色,鼠标悬浮时为红色。所以它们的QSS样式设置如下所示:

self.left_close.setStyleSheet('''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''')self.left_visit.setStyleSheet('''QPushButton{background:#F7D674;border-radius:5px;}QPushButton:hover{background:yellow;}''')self.left_mini.setStyleSheet('''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''')运行程序代码,可以发现三个控制按钮已经变成了比较美观的小圆点了:

因为最后的图形界面中,左侧的部件背景是灰色的,所以我们需要将左侧菜单中的按钮和文字颜色设置为白色,并且将按钮的边框去掉,在left_widget中设置qss样式为:

self.left_widget.setStyleSheet('''QPushButton{border:none;color:white;}QPushButton#left_label{border:none;border-bottom:1pxsolidwhite;font-size:18px;font-weight:700;font-family:"HelveticaNeue",Helvetica,Arial,sans-serif;}QPushButton#left_button:hover{border-left:4pxsolidred;font-weight:700;}''')右侧背景、搜索框和模块文本完成了左侧部件的美化之后,我们接着对右侧的内容部件进行处理,首先是顶部的搜索框,因为搜索框使用的是QLineEdit()部件,默认情况下棱角分明很是不好看,我们对其进行圆角处理:

self.right_bar_widget_search_input.setStyleSheet('''QLineEdit{border:1pxsolidgray;width:300px;border-radius:10px;padding:2px4px;}''')因为图形界面是会呈现出无边框的圆角形式,所以右侧的部件的右上角和右下角需要先行处理为圆角的,同时背景设置为白色。对推荐模块、音乐列表模块和音乐歌单模块的标题我们也需要对其字体进行放大处理,所以最后的样式为:

self.right_widget.setStyleSheet('''QWidget#right_widget{color:#232C51;background:white;border-top:1pxsoliddarkGray;border-bottom:1pxsoliddarkGray;border-right:1pxsoliddarkGray;border-top-right-radius:10px;border-bottom-right-radius:10px;}QLabel#right_lable{border:none;font-size:16px;font-weight:700;font-family:"HelveticaNeue",Helvetica,Arial,sans-serif;}''')运行程序代码,呈现出来的图形界面已经越来越像最终的形态的:

因为推荐模块和歌单模块中使用的都是QToolButton()部件,所以其样式也类似:

self.right_recommend_widget.setStyleSheet('''QToolButton{border:none;}QToolButton:hover{border-bottom:2pxsolid#F76677;}''')self.right_playlist_widget.setStyleSheet('''QToolButton{border:none;}QToolButton:hover{border-bottom:2pxsolid#F76677;}''')而音乐列表使用的是QPushButton()按钮部件,我们需要对其去除边框,修改字体和颜色等,所以其样式为:

self.right_newsong_widget.setStyleSheet('''QPushButton{border:none;color:gray;font-size:12px;height:40px;padding-left:5px;padding-right:10px;text-align:left;}QPushButton:hover{color:black;border:1pxsolid#F3F3F5;border-radius:10px;background:LightGray;}''')运行程序代码,现在的图形界面如下图所示:

接下来轮到播放进度条和播放控制按钮组了,我们需要将播放进度条的样色设置为浅红色,然后去除播放控制按钮的边框,所以其QSS样式为:

self.right_process_bar.setStyleSheet('''QProgressBar::chunk{background-color:#F76677;}''')self.right_playconsole_widget.setStyleSheet('''QPushButton{border:none;}''')到了这一步,运行程序代码所出现的图形界面越来越有最终界面的样子了:

接下来就是最后的美化工作了!

到了上一步,通过QSS调整的样式我们基本已经完成了,现在需要使用PyQt5中各个部件的其他内置属性来完成这个图形界面的最终美化工作。

透明的窗口背景会让图形界面有现代感和时尚感,我们来讲图形界面的窗口背景设为透明:

self.setWindowOpacity(0.9)#设置窗口透明度self.setAttribute(QtCore.Qt.WA_TranslucentBackground)#设置窗口背景透明运行程序代码,我们得到了一个观感很不一样的界面:

窗口背景设置为透明后的体验很不一样,但是那个默认的边框很不协调,那么去除丑丑的默认边框是必须要做的工作,通过窗口的setWindowFlag()属性我们可以设置窗口的状态从而把边框给隐藏了:

self.setWindowFlag(QtCore.Qt.FramelessWindowHint)#隐藏边框为了避免隐藏窗口边框后,左侧部件没有背景颜色和边框显示,我们再对左侧部件添加QSS属性:

QWidget#left_widget{background:gray;border-top:1pxsolidwhite;border-bottom:1pxsolidwhite;border-left:1pxsolidwhite;border-top-left-radius:10px;border-bottom-left-radius:10px;}运行程序代码,一个完成度99%的图形界面就出来了:

之所以说完成度99%,因为可以发现图形界面中左侧部件和右侧部件中有一条缝隙,我们通过设置布局内部件的间隙来把那条缝隙去除掉:

self.main_layout.setSpacing(0)这样出现的图形界面中就没有那条碍眼的缝隙了:

这样,我们对图形界面的美化工作就完成了。有什么问题欢迎留言讨论~

THE END
1.歌单图片免费下载歌单素材歌单模板千图网为您找到54张歌单相关素材,千图网还提供歌单图片,歌单素材, 歌单模板等免费下载服务,千图网是国内专业创意营销服务交易平台,一站式解决企业营销数字化、协同化,实现营销转化效果增长!https://www.58pic.com/tupian/8683227.html
2.歌单背景31张图片·12人收藏 又半啊 大图浏览https://www.duitang.com/album/?id=96809882&spm=2014.12553688.202.0
3.歌单背景图高清专题模板歌单背景图高清图片素材下载我图网歌单背景图高清专题为您整理了280430个原创高质量歌单背景图高清图片素材供您在线下载,PSD/JPG/PNG格式歌单背景图高清模板下载、高清歌单背景图高清图片大全等,下载图片素材就上我图网。https://so.ooopic.com/sousuo/55797326/
4.歌单背景图图片歌单背景图素材图片大全智能精选为您提供丰富的歌单背景图图片素材,歌单背景图图片素材下载。助力您对于歌单背景图的创意设计灵感,充实饱满作品,查找更多作品选择摄图网下载https://699pic.com/image/gedanbeijingtu.html
5.歌单背景歌单背景图片歌单背景素材觅知网为您找到8个原创歌单背景设计图片,包括歌单背景图片,歌单背景素材,歌单背景海报,歌单背景,歌单背景模板源文件下载服务,包含PSD、PNG、JPG、AI、CDR等格式素材,更多关于歌单背景素材、图片、海报、背景、插画、配图、矢量、UI、PS、免抠,模板、艺术字、PPT、视https://www.51miz.com/so-sucai/1904087.html
6.歌单背景图歌单图片歌单背景图歌单图片素材免费下载千库网为设计者提供歌单背景图歌单素材大全,为您省却歌单背景图歌单图片素材搜索时间,这里有海量歌单背景图歌单素材图片供您下载使用,本次搜索千库网为您找到10000张素材https://m.588ku.com/image/46048811.html
7.qq音乐歌单背景怎么弄换掉qq音乐歌单背景图怎么设置QQ音乐歌单背景图怎么设置呢?今天小编带来了设置QQ音乐的歌单背景教程,需要的小伙伴千万不要错过下面的教程哦。 1、打开歌单详情页 打开qq音乐,进入我的界面,打开要设置的歌单。 2、点击背景图 点击歌单顶部“背景图”。 3、点击开关按钮 点击“个性化模式”右侧开关按钮,打开个性化模式开关。 http://www.mnw.cn/news/digi/2612697.html
8.QQ音乐怎么设置歌单背景?QQ音乐设置歌单背景教程手机软件QQ音乐相信很多人都使用过,在这里我们可以选择不同的歌单去听,如果我们自己出创建的歌单如何去修改歌单背景呢?一起来看看 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用! 【如果你想靠AI翻身,你先需要一个靠谱的工具!】 QQ音乐歌单背景图怎么设置呢?今天小编带来了设置QQ音乐的歌单背景教程,需要的小伙伴千万https://www.jb51.net/softjc/820452.html
9.一键出爆款!如何用Coze搭建图文生成+排版一体化工作流?1个{{element_img2}},简单插画,卡通风格,纯白色背景, 儿童简笔画 4. 添加「智能抠图」工具:为 3 个元素抠图 为了让最终封面图的整体性更好一些,需要对生成的 3 个封面元素,进行抠图。通过添加 3 个「智能抠图」工具,分别为每一个图像元素进行抠图,最后会生成 3 个透明格式(.png)图像元素。 https://zhuanlan.zhihu.com/p/767518027
10.网易云歌单封面背景图来自ins壁纸辑网易云歌单封面背景图 ?收藏 26 6 ?342 评论 o p 同时转发到我的微博 按热度 按时间 正在加载,请稍候 设计美学博主 ü 简介: 关注我让你每天都有壁纸换! 更多a 微关系 她的关注(256) 虞书欣Esther 微博经营会员 嵩老思 抓马扣叔 她的粉丝(46.6万) https://weibo.com/5321997707/N3S91evCj
11.请问全民K歌的背景图怎么删除?纯白背景图片素材 纯黑背景图片 全民k歌背景图片大全 怎么把图片加上音乐 歌单背景图片 粉纯色背景图片 电脑怎么抠图 用电脑怎么抠图 歌单背景图 纯黑色背景图片高清 纯黑色背景图片素材 麦克风背景图片 纯白背景图片素材 纯黑背景图片 https://wenda.so.com/q/1638561349214823
12.网易云自定义背景图片理想股票技术论坛网易云音乐提供了个性化定制背景图片的功能,用户可以自定义歌单封面、个人主页背景等,让音乐界面更加个性化。充分发挥创意,选择喜欢的图片作为背景,打造独一无二的音乐空间。通过自定义背景图片,展示自己的风格和品味,与其他用户区分开来,同时也能给自己带来更好的音https://www.55188.com/tag-thread-3360291-1.html
13.一些好看的朋友圈背景图德拉安南搜索乌龙茶啊 就像夏天吹着风的傍晚一样,整个人软绵绵的很惬意,不经意间还能闻到被风吹起的头发那甜丝丝的味道。 ▼歌单可以网易云音乐搜索sunny号 池梦 《怦然心动》 文 / 文德琳?范?德拉…https://cul.sohu.com/a/763521645_121123944
14.网易云音乐怎么设置背景图设置背景壁纸的方法一键输入歌名精准搜索,就能马上找到并播放速度非常快,美妙的歌声回响在耳朵旁边。随时随地想听就听,还有超多热门流行的音乐歌单实时推送更新,可以边听边缓存下载到手机上,有无网络连接一样能听,感受声临其境的音乐盛宴,现在小编在线仔细一一为网易云音乐伙伴们带来设置背景壁纸的方法。https://www.shubang.net/news/47011.html
15.QQ音乐怎么设置个人主页背景图设置个人主页背景图方法小编相信很多使用QQ音乐的用户们都没有隐藏自己的个人主页的习惯。那么,你是否曾发现,自己的个人主页背景图有时会自行更换呢?这是因为大家设置了口味里的偏好歌手图,当然,它会随着你的偏好进行更换。也许你不太喜欢所展现的相关图片,那不妨自己试着设置满意的个人主页背景图。 https://m.liqucn.com/article/925896.wml
16.网易云音乐的背景图怎么设置自定义背景设置方法想必有的朋友喜欢展现个性,不喜欢用和别人一样的背景图,那么接下来就带给大家自定义背景图的方法,感兴趣的用户们千万不要错过。 网易云音乐的背景图怎么设置 1、首先我们在手机中打开并登录网易云音乐,然后点击左上角的按钮。 2、然后会在页面右侧弹出个人主页的界面,找到并打开个性换肤。https://app.ali213.net/gl/513815.html
17.酷狗音乐怎么改主页背景,更改首页背景图片的步骤今天就来教你一招,如何简单几步轻松更改酷狗音乐的主页背景,让你的音乐之旅更加多彩!只需几个快捷操作,就能让自己的音乐世界焕然一新,充满个人风格。跟着我,一起探索这个小秘密吧!下面,我们就一步步揭开酷狗音乐主页背景更换的神秘面纱,让你的音乐界面瞬间提升颜值,成为朋友们羡慕的焦点。快往下看,精彩教程即将展开https://www.duote.com/tech/202406/681984.html
18.歌背景图背景素材图片歌背景图背景图片下载觅元素是设计素材的免费下载网站,提供歌背景图图片,歌背景图jpg、png素材,歌背景图素材免费下载就来觅元素。https://www.51yuansu.com/bsearch/153143675f21b1599f604.html