[Python自學] PyQT5-窗口風格、窗口樣式、GIF動畫、窗口透明


一、修改窗口的風格(控件風格)

修改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_())

效果:

 

 

====


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM