本章節介紹如何在
pyqt5
中設置樣式,讓頁面更加美觀,若是不熟悉樣式的朋友能夠先看下前端樣式,其實pyqt5
中的樣式與前端中css
樣式相似。參考連接css
py
文件中直接使用樣式一、直接單獨一個組件定義樣式前端
# 給按鈕btn設置樣式
self.btn.setStyleSheet('background: cyan; border: none; color: #fff;')
複製代碼
二、設置通用樣式(只要是QPushButton
按鈕的都會設置該樣式)app
self.setStyleSheet('QPushButton {background: cyan; border: none; color: #fff;}')
複製代碼
三、給組件設置id
屬性工具
self.btn1.setObjectName('btn1')
self.setStyleSheet('QPushButton#btn1{color: #f00; font-size: 20px;}')
複製代碼
xx.qss
文件來寫樣式注意點:在
pyqt5
中相同的樣式好像只能使用一次,與前端css
樣式有區別ui
一、定義樣式url
QPushButton{
background: cyan;
border: none;
color: #fff;
}
QPushButton:btn1 {
font-size: 18px;
}
複製代碼
二、在py
中引入樣式spa
def init_ui(self):
self.btn.resize(100, 30)
self.btn.move(100, 30)
self.btn1.resize(100, 30)
self.btn1.move(100, 80)
self.btn1.setObjectName('btn1')
with open('./test1.qss', 'r') as f:
self.setStyleSheet(f.read())
複製代碼
在手寫代碼的時候咱們會使用外部樣式的方式,可是不可能每次都是使用打開文件、讀文件信息的方式進行操做,須要封裝一個工具方法code
一、新建一個文件qss_tools.py
並定義一個類pdo
class QssTools(object):
""" 定義一個讀取樣式的工具類 """
@classmethod
def set_qss_to_obj(cls, file_path, obj):
with open(file_path, 'r') as f:
obj.setStyleSheet(f.read())
複製代碼
二、使用get
import sys
from PyQt5.Qt import *
from qss_tools import QssTools
class Window(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('使用工具方法')
self.resize(500, 500)
self.move(400, 200)
self.btn = QPushButton('按鈕', self)
self.btn1 = QPushButton('按鈕一', self)
self.init_ui()
def init_ui(self):
self.btn.resize(100, 30)
self.btn.move(100, 30)
self.btn1.resize(100, 30)
self.btn1.move(100, 80)
# 直接使用類方法
QssTools.set_qss_to_obj('./test1.qss', self)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
複製代碼
pyqt5
中常見的選擇器一、通配符選擇器,直接使用*
二、類型選擇器(或者叫屬性選擇器),直接使用組件的類型,好比QLable
、QPushButton
三、id
選擇器,須要使用setObjectName
設置id
(注意一個頁面中只能只有一個相同的id
)
四、類選擇器,直接是類型選擇器前面加.
# 表示所有的QPushButton屬性
.QPushButton{
background: cyan;
border: none;
color: #fff;
}
複製代碼
五、屬性選擇器
1.定義樣式
.QLabel[level="error"] {
color: #f00;
}
.QLabel[level="success"] {
color: green;
}
.QLabel[level="warning"] {
color: #f90;
}
複製代碼
二、定義屬性及使用樣式
import sys
from PyQt5.Qt import *
from qss_tools import QssTools
class Window(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('屬性選擇器')
self.resize(500, 500)
self.move(400, 200)
self.label1 = QLabel('文本一', self)
self.label2 = QLabel('文本二', self)
self.label3 = QLabel('文本三', self)
self.init_ui()
def init_ui(self):
self.label1.move(100, 10)
self.label2.move(100, 50)
self.label3.move(100, 100)
# 分別設置屬性
self.label1.setProperty('level', 'error')
self.label2.setProperty('level', 'success')
self.label3.setProperty('level', 'warning')
QssTools.set_qss_to_obj('./test1.qss', self)
....
複製代碼
六、後代選擇器
七、子選擇器
八、子控件選擇器
關於子控件選擇器的認識:用來刷選一個複合控件上的子控件,使用方式(複合控件::子控件)
一、對於QCheckBox
和QRadioButton
的子控件indicator
QCheckBox::indicator {
image: url('./checkout1.png');
width: 20px;
height: 20px;
}
複製代碼
二、對於QComboBox
的子控件drop-down
(修改下拉框箭頭的樣式)
QComboBox::drop-down {
image:url('./dropdown.png');
}
複製代碼
:checked
: 按鈕控件被選中:unchecked
:按鈕控件未被選中:indeterminate
:對於checkBox
或者redioButton
部分選中(三態的時候):hover
:控件被鼠標放上去:pressed
:控件被按下:focus
:控件獲取焦點:disabled
:控件禁用:enabled
:控件有效的時候:on
:控件屬於on
狀態:off
: 控件處於off
狀態:!checked
:hover:checked
表示鼠標在上面且被選中