一、修改窗口的風格(控件風格)
修改Window的風格,只會響應窗口中的所有控件,而對窗口的標題欄等沒有影響(標題欄是受系統風格影響的)。
import sys # 導入QT,其中包含一些常量,例如顏色等 from PyQt5.QtCore import Qt from PyQt5 import QtCore # 導入常用組件 from PyQt5.QtWidgets import QApplication, QWidget, QStyleFactory from PyQt5.QtWidgets import QVBoxLayout, QComboBox # 使用調色板等 from PyQt5.QtGui import QIcon class DemoWin(QWidget): def __init__(self): super(DemoWin, self).__init__() self.initUI() def initUI(self): self.resize(400, 200) self.stylesComboBox = QComboBox() # 將支持的風格加到comboBox中 self.stylesComboBox.addItems(QStyleFactory.keys()) # 獲取當前窗口的風格 print(QApplication.style().objectName()) # 當前為windowsvista風格 # 獲取當前風格對應的index index = self.stylesComboBox.findText(QApplication.style().objectName(), QtCore.Qt.MatchFixedString) # index=0 # 將comboBox的值設置為當前index self.stylesComboBox.setCurrentIndex(index) # 將comboBox改變值的信號和槽函數綁定 self.stylesComboBox.activated[str].connect(self.handleStyleChanged) layout = QVBoxLayout() layout.addWidget(self.stylesComboBox) self.setLayout(layout) # 添加窗口標題 self.setWindowTitle("StyleChangeDemo") def handleStyleChanged(self, style): QApplication.setStyle(style) if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon("images/icon.ico")) # 創建一個主窗口 mainWin = DemoWin() # 顯示 mainWin.show() # 主循環 sys.exit(app.exec_())
實現效果:
二、窗口樣式(窗口風格)
1.簡單Demo
import sys # 導入QT,其中包含一些常量,例如顏色等 from PyQt5.QtCore import Qt # 導入常用組件 from PyQt5.QtWidgets import QApplication, QMainWindow # 使用調色板等 from PyQt5.QtGui import QIcon class DemoWin(QMainWindow): def __init__(self): super(DemoWin, self).__init__() self.initUI() def initUI(self): self.resize(400, 250) # 設置最大化按鈕,最小化按鈕,關閉按鈕,以及窗口一直在最頂層 self.setWindowFlags( Qt.WindowMaximizeButtonHint | Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint | Qt.WindowStaysOnTopHint) # 為窗口設置一個對象名,方便使用QSS設置樣式 self.setObjectName("MainWindow") # 設置QSS樣式 self.setStyleSheet("#MainWindow{border-image:url('./images/ailusha.png');}") # 添加窗口標題 self.setWindowTitle("窗口樣式Demo") if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon("images/icon.ico")) # 創建一個主窗口 mainWin = DemoWin() # 顯示 mainWin.show() # 主循環 sys.exit(app.exec_())
實現效果:
可以看到,窗口右上方有最大化按鈕、最小化按鈕和關閉按鈕。而且不管光標是否在窗口上,窗口都是現實在最頂層的。
2.取消邊框
self.setWindowFlags(Qt.FramelessWindowHint)
三、狀態GIF動畫
import sys # 導入QT,其中包含一些常量,例如顏色等 from PyQt5.QtCore import Qt # 導入常用組件 from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtWidgets import QLabel # 使用調色板等 from PyQt5.QtGui import QIcon, QMovie class DemoWin(QMainWindow): def __init__(self): super(DemoWin, self).__init__() self.initUI() def initUI(self): # 將窗口設置為動圖大小 self.resize(500, 272) # 使用label來顯示動畫 self.label = QLabel("", self) # label大小設置為動畫大小 self.label.setFixedSize(500, 272) # 設置動畫路徑 self.movie = QMovie("./images/timg.gif") # 將動畫添加到label中 self.label.setMovie(self.movie) # 開始播放動畫 self.movie.start() # 添加窗口標題 self.setWindowTitle("GIFDemo") if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon("images/icon.ico")) # 創建一個主窗口 mainWin = DemoWin() # 顯示 mainWin.show() # 主循環 sys.exit(app.exec_())
效果:
四、透明和半透明窗口
import sys # 使用調色板等 from PyQt5.QtGui import QIcon # 導入QT,其中包含一些常量,例如顏色等 # 導入常用組件 from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtWidgets import QPushButton class DemoWin(QMainWindow): def __init__(self): super(DemoWin, self).__init__() self.initUI() def initUI(self): # 將窗口設置為動圖大小 self.resize(500, 272) # 添加一個按鈕(按鈕也跟着窗口透明) self.btn = QPushButton("確定", self) # 設置窗口透明度 self.setWindowOpacity(0.5) # 添加窗口標題 self.setWindowTitle("WinOpacityDemo") if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon("images/icon.ico")) # 創建一個主窗口 mainWin = DemoWin() # 顯示 mainWin.show() # 主循環 sys.exit(app.exec_())
效果:
====