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

设置窗口风格

可以为每个QWidget都设置风格

setStyle(QStyle style)

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

QstyleFactory.keys()

对QApplication设置QStyle样式

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

如果其他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_())

运行效果如图,可以改变三种window下自带的样式
PyQt5图形和特效之窗口风格(一)_第1张图片

设置窗口样式


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

运行效果如图
无边框
PyQt5图形和特效之窗口风格(一)_第2张图片
子窗口,窗口无按钮,但有标题
PyQt5图形和特效之窗口风格(一)_第3张图片

实例:自定义无边框窗口

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('''background-color:blue''')



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

运行效果如图
PyQt5图形和特效之窗口风格(一)_第4张图片

代码分析

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

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

首先,得到屏幕的尺寸

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

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

        #设置窗口的尺寸
        self.setGeometry(rect)
        #显示窗口
        self.show()

  • 设置窗口风格
    • 实例:设置窗口风格
  • 设置窗口样式
    • PyQt中常见基本窗口类型
    • 自定义顶层窗口外观标志
    • 实例:窗口样式演示
    • 实例:自定义无边框窗口
      • 代码分析

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

你可能感兴趣的:(PyQt5图形和特效)