窗口特效
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