button 样式_实战PyQt5: 111-可以使用QSS样式表的部件
可以使用QSS樣式表的部件
QSS樣式表支持各種部件,屬性,偽狀態(tài)和子控件,從而可以實(shí)現(xiàn)定制部件的外觀,下面我們將詳細(xì)列出可以使用QSS樣式表的部件:
- QAbstractScrollArea:所有派生自QAbstractScrollArea類的子類,包括QTextEdit, QAbstractItemView(所有項目視圖類),都可以通過設(shè)置background-attachment屬性來實(shí)現(xiàn)可滾動背景。通過給background-attachment設(shè)置fixed和scroll,背景會固定不動或者跟隨滾動。
- QChecBox: QCheckBox的勾選符號可以使用::indicator子控件來定制。默認(rèn)情況下,勾選標(biāo)記位于部件矩形的左上角。QCheckBox的spacing屬性可以用于指定勾選標(biāo)記和文本內(nèi)容之間的間距。
- QColumnView:可以使用image屬性來設(shè)置握柄(grip)的樣式,可以使用::left-arrow子控件和::right-arrow子控件來設(shè)置箭頭的樣式
- QComboBox:組合下拉框的框架可以使用盒模型(Box Model)設(shè)置樣式。可以使用:: drop-down子控件設(shè)置下拉按鈕的樣式。默認(rèn)情況下,下拉按鈕位于部件的填充矩形的右上角。可以使用:: down-arrow子控件設(shè)置下拉按鈕內(nèi)的箭頭標(biāo)記的樣式。默認(rèn)情況下,箭頭位于下拉子控件的內(nèi)容矩形的中心。
- QSpinBox(QDoubleSpinBox, QDateEdit,QTimeEdit,QDateTimeEdit):旋轉(zhuǎn)框的框架可以使用盒模型(Box Model)設(shè)置樣式。
可以使用:: up-button和:: up-arrow子控件設(shè)置向上按鈕和箭頭的樣式。默認(rèn)情況下,向上按鈕位于小部件的“填充”矩形的右上角。如果沒有明確的尺寸,則它占據(jù)其參考矩形高度的一半。向上箭頭放置在向上按鈕的“內(nèi)容”矩形的中心。
可以使用::down-button和::down-arrow子控件設(shè)置向下按鈕和箭頭的樣式。默認(rèn)情況下,向下按鈕位于小部件的“填充”矩形的右下角。如果沒有明確的尺寸,則它占據(jù)其參考矩形高度的一半。底部箭頭位于底部按鈕的“內(nèi)容”矩形的中心。
- QDialog:僅支持background,background-clip和background-origin屬性。
- QDialogButton: 可以使用button-layout屬性更改按鈕的布局。
- QDockWidget:支持停靠時標(biāo)題欄和標(biāo)題欄按鈕的樣式。
可以使用border屬性設(shè)置停靠窗口小部件邊框的樣式。::title子控件可以用于自定義標(biāo)題欄。
關(guān)閉按鈕和浮動按鈕分別使用相對于::title子控件的::close-button和::float-button來進(jìn)行定位。標(biāo)題欄為垂直時,
當(dāng)標(biāo)題欄垂直時,需要設(shè)置:vertical偽狀態(tài)。另外,根據(jù)QDockWidget.DockWidgetFeature設(shè)置:closable,:floatable和:movable pseudo狀態(tài)。
注意:使用QMainWindow :: separator設(shè)置調(diào)整大小句柄(handle)的樣式。
警告:取消QDockWidget時,樣式表無效,因為Qt退出時,Qt使用本機(jī)頂級窗口。
- QFrame:自Qt4.3開始,在QLabel上設(shè)置樣式表會自動將QFrame的 ::frameStyle屬性設(shè)置為QFrame :: StyledPanel。
- QGroupBox:QGroupBox的標(biāo)題用::title子控件進(jìn)行定制,標(biāo)題的位置依QGroupBox::textAlignment的具體值而言。對于可選的QGroupBox而言,標(biāo)題中還會包含一個勾選標(biāo)記,勾選標(biāo)記用::indicator來定制,spacing仍然用于設(shè)置勾選標(biāo)記與文本的間距。
- QHeaderView:QHeaderView是Model/View框架中的一部分。標(biāo)題視圖的各小節(jié)(section)使用:: section子控件設(shè)置樣式。::section支持 :middle, :first, :last, :only-one, :previous-selected, :selected, :checked等偽狀態(tài)。::up-arrow和::down-arrow用于定制表頭的排序標(biāo)記。
- QLabel:QLabel不支持:hover偽狀態(tài),自Qt4.3開始,給QLabel設(shè)置樣式表也就隱式指定了QFrame::frameStyle屬性。
- QLineEdit:selection-color, selection-background-color屬性分別指定了選中文本的文本顏色和背景色,使用lineedit-password-character屬性設(shè)置密碼字符的樣式。使用lineedit-password-mask-delay更改密碼掩碼延遲時間。
- QListView(QListWidget):當(dāng)view支持斑馬色條時,alternate-background-color屬性指定備選色實(shí)現(xiàn)斑馬色帶。
當(dāng)前所選條目的的顏色和背景,可以使用selection-color和selection-background-color屬性來設(shè)置。
選擇行為由show-decoration-selected屬性控制。
使用::item子控件可以更精細(xì)地控制QListView中的條目。
- QMainWindow:支持分隔符的樣式。使用QDockWidget時,QMainWindow中的分隔符使用:: separator子控件設(shè)置樣式。
- QMenu:菜單中的獨(dú)立項使用::item子控件定制,除了常見的偽狀態(tài),::item還支持:selected, :default, :exclusive以及:non-exclusive等偽狀態(tài)。利用這些偽狀態(tài),可以為不同狀態(tài)的菜單項定制出不同的外觀。對于可勾選的菜單項,使用::indicator對勾選標(biāo)記進(jìn)行定制,::separator則定制菜單項之間的分隔符;對于有子菜單的菜單項,其箭頭號可以用::right-arrow, ::left-arrow進(jìn)行定制,還有::scroller及::tearoff兩個子組件。
- QMenuBar:菜單欄組件的spacing屬性可指定菜單項之間的間距,單個菜單項還可以通過::item子組件定制風(fēng)格。但是值得注意的是,由于MAC下菜單欄集成到了系統(tǒng)菜單欄,此時樣式表會失去作用。
- QMessageBox:messagebox-text-interaction-flags屬性可用于更改與消息框中的文本的交互方式。
- QProgressBar:進(jìn)度條組件使用::chunks子組件來定制進(jìn)度條樣式,text-align屬性用于設(shè)定進(jìn)度條中文本的對齊方向:left, center, right。對于不確定狀態(tài)的進(jìn)度條,將使用:indeterminate偽狀態(tài)集。
- QPushButton:支持:default, :flat, :checked偽狀態(tài),對于具備關(guān)聯(lián)菜單的按鈕,可以用::menu-indicator來定制下拉菜單標(biāo)記。而:open和:closed偽狀態(tài)則分別用于定制菜單打開和關(guān)閉時按鈕的外觀。從Qt5.15開始,可以將icon屬性設(shè)置為覆蓋按鈕圖標(biāo)。
- QRadioButton:::indicator用于定制文本前面的選項框,默認(rèn)情況下,選項框放置在窗口部件是“內(nèi)容”矩陣的左上角。spacing指定文本與選項框之間的間距。
- QScrollBar:滾動條的組成其實(shí)非常復(fù)雜,依據(jù)垂直和水平方向的不同,由::handle, ::add-line, ::sub-line, ::add-page, ::sub-page, ::right-arrow, ::left-arrow, ::down-arrow, ::up-arrow等子組件組成。偽狀態(tài):horizontal, :vertical用于確定滾動條的方向,width(min-width), height(min-height)則可確定滾動條的不同長和寬。
- QSizeGrip:支持width,height和image屬性。
- QSlider:對于水平的QSlider,min-width和height屬性必須同時提供;對于垂直的QSlider, 必須同時提供min-height和width屬性。QSlider由::groove和::handle兩部分組成。::groove子組件是一條槽,供::handle在上面滑動。
- QSplitter:窗體分割器,主要的部件是::handle。通過::handle可以動態(tài)改變分割器中的不同子窗口大小。
- QStatusBar:僅支持background屬性,單個條目的框架可以使用:: item子控件設(shè)置樣式。
- QTabBar:單獨(dú)的選項卡使用子控件::tab來定制樣式,使用::close-button屬性來定制關(guān)閉按鈕的樣式,選項卡支持 :only-one, :first, :last, :middle, :previous--selected, :next-selected, :selected 偽狀態(tài)。其中:top, :left, :right, :bottom偽狀態(tài)根據(jù)選項卡的方向來設(shè)置。
- QTableView(QTableWidget):當(dāng)view支持斑馬色條時,alternate-background-color屬性指定備選色實(shí)現(xiàn)斑馬色帶,selection-color和selection-background-color屬性指定選定項的文本色和背景色。注意:保證同時設(shè)置了背景色和邊框?qū)挾戎怠?/li>
- QTextEdit:使用selection-color, selection-background-color屬性定制,其他的定制方式見QAbstractScrollArea。
- QToolBar:偽狀態(tài):top, :left, :right, :bottom的使用依賴于工具欄的具體位置;:first, :last, :middle, :only-one則用于設(shè)置在工具欄中的具體位置。工具欄的分隔線用::separator子組件來設(shè)置,子組件::handle則用于設(shè)置移動工具欄的handle。
- QToolButton:如果QToolButton關(guān)聯(lián)了一個菜單,則 ::menu-indicator子控件可用于設(shè)置指示器樣式。默認(rèn)情況下,菜單指示器位于窗口小部件的填充矩形的右下角。 如果被設(shè)置成了QToolButton::MenuButtonPopup模式,那么::menu-button子控件用于繪制菜單按鈕。::menu-arrow子控件用于在菜單按鈕內(nèi)部繪制菜單箭頭。當(dāng)QToolButton顯示箭頭時,將使用::up-arrow,::down-arrow,::left-arrow和::right-arrow子控件。注意:如果設(shè)置了QToolButton的背景色,那么必須還要設(shè)置邊框border的寬度才會起作用。這是因為QToolButton默認(rèn)繪制的邊框會完全遮擋住用戶設(shè)置的背景色。
- QToolBox:可以使用::tab子控件設(shè)置各個選項卡的樣式。選項卡支持:only-one,:first,:last,:middle,:previous-selected,:next-selected,:selected偽狀態(tài)。
- QToolTip:opacity屬性控制QToolTip的不透明度。
- QTreeView(QTreeWidget):當(dāng)View支持斑馬色條時,alternate-background-color屬性指定備選色實(shí)現(xiàn)斑馬色帶,selection-color和selection-background-color屬性指定選定項的文本色和背景色。show-decoration-selected屬性控制選中時是選中整項還是僅僅只是項的文本。::branch子控件設(shè)置樹形視圖的分支的樣式,::branch子控件支持:open,:closed,:has-sibling和:has-children偽狀態(tài)。使用::item子控件可以更精細(xì)地控制View中的項目。
- QWidget:僅支持background,background-clip和background-origin屬性。
代碼演示
演示加載qss文件的方法。這里僅列出py文件代碼,完整資源可從網(wǎng)絡(luò)上下載。完整代碼如下:
import?sysfrom?PyQt5.QtCore?import?Qt,?QTimer,?QDateTime,?QDate,?QFilefrom?PyQt5.QtGui?import?QPalette,?QColorfrom?PyQt5.QtWidgets?import?(QApplication,?QWidget,?QMainWindow,?QPushButton,?QTextEdit,??????????????????????????????QGroupBox,?QCheckBox,?QRadioButton,?QComboBox,?QLabel,?????????????????????????????QVBoxLayout,?QHBoxLayout,?QGridLayout,?QStyleFactory,?????????????????????????????QTabWidget,?QSizePolicy,?QProgressBar,?QTableWidget,?????????????????????????????QLineEdit,?QSpinBox,?QDateTimeEdit,?QSlider,?????????????????????????????QScrollBar,?QMenu,?QMenuBar,?QAction,?QCalendarWidget,?QDial)?import?resource_rc?#標(biāo)記控制窗口class?LoadQssDemo(QMainWindow):????def?__init__(self):????????super(LoadQssDemo,?self).__init__()????????????????#?設(shè)置窗口標(biāo)題????????self.setWindowTitle('實(shí)戰(zhàn)PyQt5:?加載QSS樣式表文件')????????????????#應(yīng)用的初始調(diào)色板????????self.origPalette?=?QApplication.palette()????????????????self.initUi()????????????def?initUi(self):????????self.initMenuBar()???????????????????????#生成要顯示的部件????????self.createTopLeftGroupBox()????????self.createTopRightGroupBox()????????self.createBottomLeftTabWidget()????????self.createBottomRightGroupBox()????????self.createProgressBar()????????????????mainLayout?=?QGridLayout()????????mainLayout.addWidget(self.topLeftGroupBox,?1,?0)?#1行0列????????mainLayout.addWidget(self.topRightGroupBox,?1,?1)?#1行1列????????mainLayout.addWidget(self.bottomLeftTabWidget,?2,?0)?#2行0列????????mainLayout.addWidget(self.bottomRightGroupBox,?2,?1)?#2行1列????????mainLayout.addWidget(self.progressBar,?3,?0,?1,?2)?##?3行0列,占1行2列????????mainLayout.setRowStretch(1,?1)????????mainLayout.setRowStretch(2,?1)????????mainLayout.setColumnStretch(0,?1)????????mainLayout.setColumnStretch(1,?1)????????????????mainWidget?=?QWidget()????????mainWidget.setLayout(mainLayout)????????????????self.setCentralWidget(mainWidget)????????????????#這里加載一個QSS文件????????self.loadStyleSheet()????????#菜單欄設(shè)置????def?initMenuBar(self):????????mBar?=?self.menuBar()????????????????menuFile?=?mBar.addMenu('文件(&F)')??????????????????aExit?=?QAction('退出(&X)',?self)????????aExit.triggered.connect(self.close)????????menuFile.addAction(aExit)?????????#創(chuàng)建左上角成組部件????def?createTopLeftGroupBox(self):????????self.topLeftGroupBox?=?QGroupBox('組?1')????????????????rad1?=?QRadioButton('單選按鈕1')????????rad2?=?QRadioButton('單選按鈕2')????????rad3?=?QRadioButton('單選按鈕3')????????rad1.setChecked(True)????????????????chk?=?QCheckBox('三態(tài)復(fù)選按鈕')????????chk.setTristate(True)????????chk.setCheckState(Qt.PartiallyChecked)????????????????layout?=?QVBoxLayout()????????layout.addWidget(rad1)????????layout.addWidget(rad2)????????layout.addWidget(rad3)????????layout.addWidget(chk)????????layout.addStretch(1)????????????????self.topLeftGroupBox.setLayout(layout)????????????#創(chuàng)建右上角成組部件????def?createTopRightGroupBox(self):????????self.topRightGroupBox?=?QGroupBox('組?2')????????????????btnDefault?=?QPushButton('Push?Button:缺省模式')????????btnDefault.setDefault(True)????????????????btnToggle?=?QPushButton('Push?Button:?切換模式')????????btnToggle.setCheckable(True)????????btnToggle.setChecked(True)????????????????btnFlat?=?QPushButton('Push?Button:?扁平外觀')????????btnFlat.setFlat(True)????????????????layout?=?QVBoxLayout()????????layout.addWidget(btnDefault)????????layout.addWidget(btnToggle)????????layout.addWidget(btnFlat)????????layout.addStretch(1)????????????????self.topRightGroupBox.setLayout(layout)????????????????????#創(chuàng)建左下角Tab控件????def?createBottomLeftTabWidget(self):????????self.bottomLeftTabWidget?=?QTabWidget()????????self.bottomLeftTabWidget.setSizePolicy(QSizePolicy.Preferred,?QSizePolicy.Ignored)????????????????tab1?=?QWidget()????????tableWidget?=?QTableWidget(10,?10)??#10行10列????????????????tab1Layout?=?QHBoxLayout()????????tab1Layout.setContentsMargins(5,5,5,5)????????tab1Layout.addWidget(tableWidget)????????tab1.setLayout(tab1Layout)????????????????tab2?=?QWidget()????????textEdit?=?QTextEdit()????????textEdit.setPlainText("一閃一閃小星星,"??????????????????????????????"我想知道你是什么."???????????????????????????????"在整個世界之上,?如此的高,"??????????????????????????????"像在天空中的鉆石."??????????????????????????????"一閃一閃小星星,"???????????????????????????????"我多想知道你是什么!")????????????????tab2Layout?=?QHBoxLayout()????????tab2Layout.setContentsMargins(5,?5,?5,?5)????????tab2Layout.addWidget(textEdit)????????tab2.setLayout(tab2Layout)????????????????tab3?=?QWidget()????????calendar?=?QCalendarWidget()????????#設(shè)置最小日期????????calendar.setMinimumDate(QDate(1900,1,1))????????#設(shè)置最大日期????????calendar.setMaximumDate(QDate(4046,1,1))????????#設(shè)置網(wǎng)格可見????????calendar.setGridVisible(True)????????tab3Layout?=?QHBoxLayout()????????tab3Layout.setContentsMargins(5,?5,?5,?5)????????tab3Layout.addWidget(calendar)????????tab3.setLayout(tab3Layout)????????????????self.bottomLeftTabWidget.addTab(tab1,?'表格(&T)')????????self.bottomLeftTabWidget.addTab(tab2,?'文本編輯(&E)')????????self.bottomLeftTabWidget.addTab(tab3,?'日歷(&C)')????????????????#self.bottomLeftTabWidget.addTab(tab1,?'表格(&T)')????????#self.bottomLeftTabWidget.addTab(tab2,?'文本編輯(&E)')????????????????????#創(chuàng)建右下角成組部件????def?createBottomRightGroupBox(self):????????self.bottomRightGroupBox?=?QGroupBox('組?3')????????self.bottomRightGroupBox.setCheckable(True)????????self.bottomRightGroupBox.setChecked(True)????????????????lineEdit?=?QLineEdit('s3cRe7')????????lineEdit.setEchoMode(QLineEdit.Password)????????????????spinBox?=?QSpinBox(self.bottomRightGroupBox)????????spinBox.setValue(50)????????????????dateTimeEdit?=?QDateTimeEdit(self.bottomRightGroupBox)????????dateTimeEdit.setDateTime(QDateTime.currentDateTime())????????????????slider?=?QSlider(Qt.Horizontal,?self.bottomRightGroupBox)????????slider.setValue(40)????????????????scrollBar?=?QScrollBar(Qt.Horizontal,?self.bottomRightGroupBox)????????scrollBar.setValue(60)????????????????dial?=?QDial(self.bottomRightGroupBox)????????dial.setValue(30)????????dial.setNotchesVisible(True)????????????????layout?=?QGridLayout()????????layout.addWidget(lineEdit,?0,?0,?1,?2)??#0行0列,占1行2列????????layout.addWidget(spinBox,?1,?0,?1,?2)???#1行0列,占1行2列????????layout.addWidget(dateTimeEdit,?2,?0,?1,?2)?#2行0列,占1行2列????????layout.addWidget(slider,?3,?0)??#3行0列,占1行1列????????layout.addWidget(scrollBar,?4,?0)?#4行0列,占1行1列????????layout.addWidget(dial,?3,?1,?2,?1)??#3行1列,占2行1列????????layout.setRowStretch(5,?1)????????????????self.bottomRightGroupBox.setLayout(layout)??????????????#禁止窗口上的組件????def?setWidgetsDisbaled(self,?disable):????????self.topLeftGroupBox.setDisabled(disable)????????self.topRightGroupBox.setDisabled(disable)????????self.bottomLeftTabWidget.setDisabled(disable)????????self.bottomRightGroupBox.setDisabled(disable)????????????#創(chuàng)建進(jìn)度條????def?createProgressBar(self):????????self.progressBar?=?QProgressBar()????????self.progressBar.setRange(0,?10000)????????self.progressBar.setValue(0)????????????????#?定時器,定時更新進(jìn)度條的值????????timer?=?QTimer(self)????????timer.timeout.connect(self.advanceProgressBar)????????timer.start(100)????????????#設(shè)置進(jìn)度條的值????????????def?advanceProgressBar(self):????????curVal?=?self.progressBar.value()????????maxVal?=?self.progressBar.maximum()????????self.progressBar.setValue(curVal?+?(maxVal?-?curVal)//100)??????????#關(guān)鍵代碼!!!!!!??????def?loadStyleSheet(self):????????file?=?QFile(':/qdarkstyle/qdarkstyle.qss')????????file.open(QFile.ReadOnly)?????????styleSheet?=?file.readAll()????????styleSheet?=?str(styleSheet,?encoding='utf8')????????????????file.close()?????????QApplication.instance().setStyleSheet(styleSheet)????if?__name__?==?'__main__':????app?=?QApplication(sys.argv)????window?=?LoadQssDemo()????window.show()????sys.exit(app.exec())?????運(yùn)行結(jié)果如下圖:
加載QSS文件
本文知識點(diǎn)
- 可以使用QSS樣式表的部件;
- 在應(yīng)用中加載一個QSS文件。
喜歡的人,請多多關(guān)注,評論,收藏,點(diǎn)贊,和轉(zhuǎn)發(fā)。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的button 样式_实战PyQt5: 111-可以使用QSS样式表的部件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入浅出PE文件格式---自己动手打造P
- 下一篇: C++Builder编程中动态更改自定义