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

    效果:

    ====

  • 相关阅读:
    Mysql InnoDB引擎下 事务的隔离级别
    Spring 两大核心 IOC 和 AOP
    java 冒泡排序
    MyBatis 传入List集合作为条件查询数据
    fastfusion运行
    数据集
    工具学习
    三维重建
    Scrivener破解
    博客园设置
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/13132504.html
Copyright © 2020-2023  润新知