当前位置:网站首页>PyQt5快速开发与实战 8.1 窗口风格
PyQt5快速开发与实战 8.1 窗口风格
2022-07-30 08:40:00 【Ding Jiaxiong】
PyQt5快速开发与实战
8. 第8章 PyQt5 图形和特效
定制窗口样式,以实现统一的窗口风格和美化窗口界面。
8.1 窗口风格
8.1.1 设置窗口风格
可以为每个Widget设置风格
setStyle(QStyle style)获得当前平台支持的原有的QStyle样式
QStyleFacTory.keys()对QApplication设置QStyle样式
QApplication.setStyle(QStyleFactory.create("WindowsXP"))
案例——设置窗口风格
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5 import QtCore
from PyQt5.QtGui import *
class AppWidget(QWidget):
def __init__(self,parent = None):
super(AppWidget, self).__init__(parent)
horizontalLayout = QHBoxLayout()
self.styleLabel = QLabel("设置样式:")
self.styleComboBox = QComboBox()
self.styleComboBox.addItems(QStyleFactory.keys())
index = self.styleComboBox.findText(QApplication.style().objectName(),QtCore.Qt.MatchFixedString)
self.styleComboBox.setCurrentIndex(index)
self.styleComboBox.activated[str].connect(self.handleStyleChanged)
horizontalLayout.addWidget(self.styleLabel)
horizontalLayout.addWidget(self.styleComboBox)
self.setLayout(horizontalLayout)
def handleStyleChanged(self,style):
QApplication.setStyle(style)
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = AppWidget()
win.show()
sys.exit(app.exec_())

8.1.2 设置窗口样式
PyQt 使用setWindowFlags(Qt.WindowFlags)函数设置窗口样式,其具体参数如下:
- 基本窗口类型
- 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.windowMaximizeButtonBintl Qt.WindowMinimizeBute
- Qt.windowCloseButtonHint #添加一个关闭按钮
- Qt.windowContextHelpButtonHint # 添加问号和关闭按钮,像对话框一样
- Qt.windowStaysonTopHint # 窗口始终处于顶层位置
- Qt.windowStays0nBottomHint # 窗口始终处于底层位置
案例——使用setWindowFlags函数
from PyQt5.QtCore import Qt
import sys
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.setObjectName("MainWindow")
self.setStyleSheet("#MainWindow{border-image:url(images/python.jpg);}")
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())

8.1.3 使用自定义的无边框窗口
随着互联网的发展,越来越多的软件在初始化时,采用在用户的显示屏幕中全屏展开的形式。在接下来的例子中,开发一个自定义的无边框窗口,它可以占用100%的用户显示屏幕。
设置窗口标志,实现无边框效果
self.setWindowFlags(Qt.FramelessWindowHint)覆盖实现最大化函数
首先,应得到屏幕可显示尺寸,需要用到QDeskWidget类的availableGeometry()函数。
desktop = QApplication.desktop() rect = desktop.availableGeometry()设置窗口尺寸为屏幕可显示尺寸并显示
self.setGeometry(rect) self.show()
案例——全屏显示
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtCore import Qt
### 自定义窗口类
class MyWindow(QMainWindow):
'''自定义窗口类'''
### 构造函数
def __init__(self, parent=None):
'''构造函数'''
# 调用父类构造函数
super(MyWindow, self).__init__(parent)
# 设置窗口标记(无边框 )
self.setWindowFlags(Qt.FramelessWindowHint)
# 便于显示,设置窗口背景颜色(采用QSS)
self.setStyleSheet('''background-color:red; ''')
###覆盖函数
def showMaximized(self):
'''最大化'''
# 得到桌面控件
desktop = QApplication.desktop()
# 得到屏幕可显示尺寸
rect = desktop.availableGeometry()
# 设置窗口尺寸
self.setGeometry(rect)
# 设置窗口显示
self.show()
### 主函数
if __name__ == "__main__":
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
'''主函数'''
# 声明变量
app = QApplication(sys.argv)
# 创建窗口
window = MyWindow()
# 调用最大化显示
window.showMaximized()
# 应用程序事件循环
sys.exit(app.exec_())

边栏推荐
- 研发人员的悲剧——“庞氏骗局”
- 涛思 TDengine 2.6+优化参数
- Flutter 环境变量配置和flutter doctor中的错误解决
- 【愚公系列】2022年07月 Go教学课程 021-Go容器之切片操作
- How to use Jmeter to carry out high concurrency in scenarios such as panic buying and seckill?
- 如何使用 Jmeter 进行抢购、秒杀等场景下,进行高并发?
- Detailed explanation of 4D words: C language three-point chess advanced + N-piece chess recursive dynamic judgment of winning or losing
- HCIP - MPLS VPN experiment
- MySQL Explain 使用及参数详解
- 怎么在本地电脑上运行dist文件
猜你喜欢

电源完整性的去耦和层间耦合电容

Kotlin 值类 - value class

负电压电路(原理分析)

Two solutions for Excel xlsx file not supported

读书笔记:《这才是心理学:看穿伪心理学的本质(第10版)》

C语言经典练习题(3)——“汉诺塔(Hanoi)“

The FPGA based protocol 2: the I2C read and write E squared PROM

How to use Jmeter to carry out high concurrency in scenarios such as panic buying and seckill?

hcip 第14天学习笔记

qsort 函数的使用及其模拟实现
随机推荐
聊聊 MySQL 事务二阶段提交
分布式系统大势所趋,银行运维如何与时俱进?
Circuit analysis: constant current source circuit composed of op amp and triode
Taosi TDengine 2.6+ optimization parameters
PyTorch安装及环境配置(Win10)
How to implement Golang DES encryption and decryption?
stugc_paper
七大排序之直接选择排序
剑指offer 48:最长不重复子串
Unity performance analysis Unity Profile performance analysis tool
瑞吉外卖项目(五) 菜品管理业务开发
Detailed description of iperf3 parameter options
Detailed explanation of 4D words: C language three-point chess advanced + N-piece chess recursive dynamic judgment of winning or losing
PCB板加工流程中哪些因素会影响到传输线阻抗
看完这100个客户需求,我终于知道企业文档管理的秘密
公共Jar包的版本管理
[Unity]UI切换环形滚动效果
自动化测试selenium(一)
研发转至FAE(现场应用工程师),是否远离技术了?有前途吗?
【科普向】5G核心网架构和关键技术