窗口特效

PyQt5图形和特效之窗口风格(一)

 版权声明:如有使用转载,请附加出处 https://blog.csdn.net/jia666666/article/details/81835851

设置窗口风格

可以为每个QWidget都设置风格

setStyle(QStyle style)
  • 1

获取当前平台支持的原有的QStyle样式

QstyleFactory.keys()
  • 1

对QApplication设置QStyle样式

QApplication.setStyle(QStyleFactory.create('WindowsXP'))
  • 1

如果其他Widget没有设置QStyle,默认使用QApplication设置的style

实例:设置窗口风格

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class AppWidget(QWidget):
    def __init__(self,parent=None):
        super(AppWidget, self).__init__(parent)
        #水平布局
        Hloyout=QHBoxLayout()

        #实例化标签与列表控件
        self.styleLabel=QLabel('set Style')
        self.styleComboBox=QComboBox()

        #从QStyleFactory中增加多个显示样式到列表控件
        self.styleComboBox.addItems(QStyleFactory.keys())

        #选择当前窗口的风格
        index=self.styleComboBox.findText(
            QApplication.style().objectName(),
            Qt.MatchFixedString
        )

        #设置当前窗口的风格
        self.styleComboBox.setCurrentIndex(index)

        #通过combobox控件选择窗口风格
        self.styleComboBox.activated[str].connect(self.handlestyleChanged)

        #添加控件到布局,设置窗口布局
        Hloyout.addWidget(self.styleLabel)
        Hloyout.addWidget(self.styleComboBox)
        self.setLayout(Hloyout)

    #改变窗口风格
    def handlestyleChanged(self,style):
        QApplication.setStyle(style)
if __name__ == '__main__':
    app=QApplication(sys.argv)
    widgetApp=AppWidget()
    widgetApp.show()
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

运行效果如图,可以改变三种window下自带的样式 
这里写图片描述

设置窗口样式


PyQt中常见基本窗口类型

窗口类型描述
Qt.Widget 默认窗口,有最小化,最大化,关闭按钮
Qt.Window 普通窗口,有最小化,最大化,关闭按钮
Qt.Dialog 会话框窗口,有问号和关闭按钮
Qt.Popup 弹出窗口,窗口无边框
Qt.ToolTip 提示窗口,窗口无边框,无任务栏
Qt.SplashScreen 闪屏,窗口无边框,无任务栏
Qt.SubWindow 子窗口,窗口无按钮,但有标题

自定义顶层窗口外观标志

属性描述
Qt.MSWindowsFixedSizeDialogHint 固定窗口,无法调整大小
Qt.FramelessWindowHint 窗口无边框
Qt.CustomizeWindowHint 有边框,无标题栏与按钮,不能移动和拖动
Qt.WindowTitleHint 添加标题栏与关闭按钮
Qt.WindowSystemMenuHint 添加系统目录和关闭按钮
Qt.WindowMaximizeButtonHint 激活最大化按钮与关闭按钮,禁止最小化按钮
Qt.WindowMinimizeButtonHint 激活最小化按钮与关闭按钮,禁止最大化按钮
Qt.WindowMinMaxButtonsHint 激活最大化与最小化按钮和关闭按钮
Qt.WindowCloseButtonHint 添加一个关闭按钮
Qt.WindowContextHelpButtonHint 添加问号与关闭按钮,像对话框一样
Qt.WindowStaysOnTopHint 窗口始终处于顶部位置
Qt.windowStaysOnButtonHint 窗口始终处于底部位置

实例:窗口样式演示

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow, QApplication


class MainWIndow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWIndow, self).__init__(parent)
        self.resize(400, 200)
        self.setWindowTitle('设置窗口样式的例子')

        # 设置无边框窗口样式
        self.setWindowFlags(Qt.FramelessWindowHint)

        #子窗口,窗口无按钮 ,但有标题,可注释掉观察效果
        self.setWindowFlags(Qt.SubWindow)

        self.setObjectName("MainWindow")
        self.setStyleSheet("#MainWindow{border-image:url(images/python.jpg);}")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MainWIndow()
    win.show()
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

运行效果如图 
无边框 
这里写图片描述 
子窗口,窗口无按钮,但有标题 
这里写图片描述

实例:自定义无边框窗口

import sys
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtCore import *

class MyWindow(QMainWindow):
    '''自定义窗口类'''
    '''构造函数'''
    def __init__(self,parent=None):
        '''调用父类构造函数'''
        super(MyWindow, self).__init__(parent)

        #设置窗口标志,无边框
        self.setWindowFlags(Qt.FramelessWindowHint)

        #设置窗口背景颜色(采用QSS)
        self.setStyleSheet(''' outline: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-size: inherit; overflow-wrap: break-word;">def showMaximized(self):
        '''最大化窗口'''
        #得到桌面控件
        desktop=QApplication.desktop()
        #得到桌面可显示的尺寸
        rect=desktop.availableGeometry()
        #设置窗口的尺寸

        self.setGeometry(rect)
        #显示窗口
        self.show()
#主函数
if __name__ == '__main__':
    #声明变量
    app=QApplication(sys.argv)
    #创建窗口
    window=MyWindow()

    # todo 调用最大化显示窗口
    window.showMaximized()

    #应用程序事件循环
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

运行效果如图 
这里写图片描述

代码分析

设置窗口标志,实现无边框效果

  #设置窗口标志,无边框
  self.setWindowFlags(Qt.FramelessWindowHint)
  • 1
  • 2

首先,得到屏幕的尺寸

        #得到桌面控件
        desktop=QApplication.desktop()
        #得到桌面可显示的尺寸
        rect=desktop.availableGeometry()
  • 1
  • 2
  • 3
  • 4

然后设置窗口尺寸为屏幕可以显示的尺寸并显示

        #设置窗口的尺寸
        self.setGeometry(rect)
        #显示窗口
        self.show()
  • 1
  • 2
  • 3
  • 4

 

 

相关源码及素材 
https://download.csdn.net/download/jia666666/10616087

posted @ 2019-01-17 15:57  疯狂的骆驼  阅读(299)  评论(0编辑  收藏  举报