|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 wei_Y 于 2015-5-15 21:23 编辑
Qt上的控件一般都比较难看。。真的,不信你看,
这样的颜值已经不足以取悦大众了!!但是在designer上并没有发现任何可以修改他样式的地方。
这让人有点失望,Qt咋连样式都改不了,这到底是什么$^%$%^$%^$%#$%!!
0. QSS!
原来Qt借鉴CSS的思路,让Qt也使用类似CSS的结构。让界面和美化分离。QSS也和CSS差不多。(CSS应该功能更强大些。)
OK,能美化就好嘛~。
1. QSS怎么玩?
窗口部件里有个函数,专门设置样式。
设置样式表,奏是辣么直接。
它接受字符串,估计二进制的不接受。
让我们敲上他走起~!
- 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. 咱也是有背景的窗口!
让我们首先创建一只QSS文件,window.qss(其实不用.qss后缀,正常编码的文件都可以。神马.txt .py .gif .avi .rmvb只不过这些看起来好混淆了,用QSS也可以让其他人知道这文件是个啥。)
好啦,话不多说写上几行试试手。
- QWidget#main{
- background: black;
- }
复制代码
#代表某控件的名字,就是setObjectName设置的那个名字。如果不设置会给所有的这个控件都设置这个效果。
让我们走起。
哎?你说你的还是个白框?那你肯定忘了
- 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. 关于背景的其他属性。
background-position: 设置背景的位置。top bottom left right 可组合使用。
background-repeat:
设置背景是否可以重复。 repeat-x可横向重复沿x轴,repeat-y可纵向重复沿y轴,repeat可沿x,y轴重复,no-repeat不可重复。默认是repeat。选个小点的背景图再把窗口弄大点可看到效果。
background-origin:
设置背景的组织。 margin 外边距 border 边框 padding 内边距 content 内容部分。
background-attachment:
设置背景附件。 scroll 滚动,fixed填充。这在一个滚动的区域是让背景图片(一般是图片,颜色的话看不出来。)是让他滚动还是不滚。
background-clip:
这个具体属性貌似和origin一样,效果没试过,英语渣看的也不是太懂,附上原文。
- The widget's rectangle, in which the background is drawn.
- This property specifies the rectangle to which the background-color and background-image are clipped.
- This property is supported by QAbstractItemView subclasses, QAbstractSpinBox subclasses, QCheckBox, QComboBox, QDialog, QFrame, QGroupBox, QLabel, QPushButton, QRadioButton, QSplitter, QTextEdit, QToolTip, and plain QWidgets.
- If this property is not specified, the default is border.
复制代码
渣翻译:
这个矩形控件(不知道为啥叫矩形还是说翻译的不对,还是另有深意,知道的说下啦。),是在有背景的情况下使用的。
这个属性指示这个矩形的背景颜色和背景图片修剪样子。
这个属性支持QAbstractItemView的子类,QAbstractSpinBox的子类,QCheckBox,QComboBox, QDialog, QFrame, QGroupBox, QLabel,
QPushButton, QRadioButton, QSplitter, QTextEdit, QToolTip, 和绘画控件。
如果这个属性不被指示,那么默认为边框。
Q: 你在哪找的这玩意?
A: 官方文档: 点我
Q: 有中文版么?
A: 或许以后会有。。
Q: 有木有视频教程?
A: 可以看看css,基本差不多应该。。
|
评分
-
查看全部评分
|