pyqtqss_温故而知新-PyQt5学习笔记系列-特效!QSS!,Python交流,技术交流区,鱼C论坛 - Powered by Discuz!...

本文介绍了如何使用PyQt5的QSS来美化界面,通过设置QSS改变窗口部件的样式,包括背景颜色、背景图片等。通过示例代码展示了如何设置窗口背景,并解决了无法直接在QWidget上设置背景图片的问题,建议使用QFrame作为窗口基类或添加QFrame覆盖QWidget。
摘要由CSDN通过智能技术生成

0.jpg (61.4 KB, 下载次数: 4)

2015-5-15 20:05 上传

Qt上的控件一般都比较难看。。真的,不信你看,

1.jpg (91.39 KB, 下载次数: 0)

2015-5-15 20:09 上传

这样的颜值已经不足以取悦大众了!!但是在designer上并没有发现任何可以修改他样式的地方。

这让人有点失望,Qt咋连样式都改不了,这到底是什么$^%$%^$%^$%#$%!!

0.  QSS!

原来Qt借鉴CSS的思路,让Qt也使用类似CSS的结构。让界面和美化分离。QSS也和CSS差不多。(CSS应该功能更强大些。)

OK,能美化就好嘛~。

1.  QSS怎么玩?

窗口部件里有个函数,专门设置样式。

self.setStyleSheet("")复制代码设置样式表,奏是辣么直接。

它接受字符串,估计二进制的不接受。

让我们敲上他走起~!

import sys

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

class Main(QWidget):

def __init__(self, parent=None):

super(Main, self).__init__(parent)

self.setObjectName('main')

self.setWindowTitle('Hello Qt')

self.setWindowIcon(QIcon('../pic/e.jpg'))

self.resize(300, 300)

self.setStyleSheet("")

if __name__ == '__main__':

app = QApplication(sys.argv)

main = Main()

main.show()

sys.exit(app.exec_())复制代码

2.jpg (8.06 KB, 下载次数: 0)

2015-5-15 20:28 上传

呃,好像并没有什么变化!(

3.gif (58.17 KB, 下载次数: 0)

2015-5-15 20:27 上传

特么废话,啥也没设置会出现啥变化。)

2.  咱也是有背景的窗口!

让我们首先创建一只QSS文件,window.qss(其实不用.qss后缀,正常编码的文件都可以。神马.txt .py .gif .avi .rmvb只不过这些看起来好混淆了,用QSS也可以让其他人知道这文件是个啥。)

好啦,话不多说写上几行试试手。

QWidget#main{

background: black;

}复制代码

#代表某控件的名字,就是setObjectName设置的那个名字。如果不设置会给所有的这个控件都设置这个效果。

让我们走起。

3.jpg (7.44 KB, 下载次数: 0)

2015-5-15 20:36 上传

哎?你说你的还是个白框?那你肯定忘了

with open('window.qss', 'r') as q:

self.setStyleSheet(q.read())复制代码

关于颜色代码问题,请百度 颜色代码。(

要不你#000000-#FFFFFF一个个试也可以。)关于颜色搭配问题,请百度  颜色搭配。

3.  图片!颜色神马的根本彰显不了本窗口的地位!

QWidget#main{

background-image: url(../pic/e.jpg);

}复制代码

但是并没有期望的图片出现。(路径打错除外,图片没有除外。)

那是因为QWidget创建的窗口并不会有图片,不过他的子窗口都会继承这个图片(不指定名字的话)。至于QWidget为毛不能设置上图片,原因不清楚。。

目前找到两种方法解决这个问题。

第一个是换一个继承类。

窗口部件还有QMainWindow可以用,也可以继承QFrame。

第二个是在QWidget中添加一个QFrame让QFrame覆盖住QWidget。然后其他东西在QFrame上写。

不过这样不如直接继承QFrame。

那改成QFrame类:

import sys

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

class Main(QFrame):

def __init__(self, parent=None):

super(Main, self).__init__(parent)

self.setObjectName('main')

self.setWindowTitle('Hello Qt')

self.setWindowIcon(QIcon('../pic/e.jpg'))

self.resize(658, 658)

with open('window.qss', 'r') as q:

self.setStyleSheet(q.read())

if __name__ == '__main__':

app = QApplication(sys.argv)

main = Main()

main.show()

sys.exit(app.exec_())复制代码

4.jpg (38.28 KB, 下载次数: 0)

2015-5-15 20:49 上传

如果是空白请检查是否存在此图片,路径是否正确。

../表示相对于这层目录的上层,如果是在本层目录下就什么都不要加,否则会变成根目录。

4.  关于背景的其他属性。

background-position:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值