python GUI庫圖形界面開發(fā)之PyQt5動態(tài)加載QSS樣式文件
在Qt中經(jīng)常需要使用樣式,為了降低耦合性(與邏輯代碼分離),我們通常會定義一個QSS文件,然后編寫各種控件(QLabel,QLIneEdit,QPushButton等)的樣式,最后使用QApplication或QMainWindow來加載樣式,這樣就可以讓整個應用程序共享一種樣式了
編寫QSS首先新建一個擴展名為.qss的文件,如style.qss,然后將其加入資源文件(.qrc)中,在style.qss文件中編寫樣式代碼,例如
QMainWindow{ border-image:url(./images/screen1.jpg);}QToolTip{ border: 1px solid rgb(45, 45, 45); background: white; color: red;}加載QSS
為了方便以后使用,可以編寫一個公共類COmmomHelper,其核心代碼如下
class CommonHelper: def __init__(self): pass @staticmethod def readQss(style): with open(style, ’r’) as f: return f.read()
然后在主函數(shù)進行加載,其核心代碼如下
app = QApplication(sys.argv) win = MainWindow() styleFile = ’./style.qss’ qssStyle = CommonHelper.readQss(styleFile) win.setStyleSheet(qssStyle) win.show() sys.exit(app.exec_())
在換樣式時,不需要全局修改,只需要CommomHelper.readQSS()讀取不同的QSS文件即可
完整代碼如下注意第一步的qss文件的建立,下面會用到
import sysfrom PyQt5.QtWidgets import QMainWindow, QApplication, QVBoxLayout, QPushButtonclass CommonHelper: def __init__(self): pass @staticmethod def readQss(style): with open(style, ’r’) as f: return f.read()class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.resize(477, 258) self.setWindowTitle('加載QSS文件') btn1 = QPushButton(self) btn1.setText(’添加’) btn1.setToolTip(’測試提示’) vbox = QVBoxLayout() vbox.addWidget(btn1) self.setLayout(vbox)if __name__ == '__main__': app = QApplication(sys.argv) win = MainWindow() styleFile = ’./style.qss’ qssStyle = CommonHelper.readQss(styleFile) win.setStyleSheet(qssStyle) win.show() sys.exit(app.exec_())
沒有加載樣式時,窗口樣式
加載樣式后,窗口樣式
本文介紹了如何在窗口運行狀態(tài)下動態(tài)加載QSS樣式文件改變窗口樣式,更多關(guān)于QSS樣式的文章請查看下面的相關(guān)鏈接
相關(guān)文章:
1. ASP.NET MVC使用Boostrap實現(xiàn)產(chǎn)品展示、查詢、排序、分頁2. vue 如何使用遞歸組件3. 每日六道java新手入門面試題,通往自由的道路第二天4. 每日幾道java新手入門面試題,通往自由的道路5. Java并發(fā)編程必備之Future機制6. 淺談vue中g(shù)et請求解決傳輸數(shù)據(jù)是數(shù)組格式的問題7. 如何在在Vue3中使用markdown 編輯器組件8. Django自帶的用戶驗證系統(tǒng)實現(xiàn)9. Android SeekBar實現(xiàn)平滑滾動10. 詳解SpringBoot修改啟動端口server.port的四種方式
