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: