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下自带的样式
这里写图片描述

设置窗口样式


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

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

实例:自定义无边框窗口

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

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

代码分析

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

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

首先,得到屏幕的尺寸

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

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

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

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

  • 21
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jia666666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值