[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_())

效果:

====

原文地址:https://www.cnblogs.com/leokale-zz/p/13132504.html