PyQt5之窗口风格
使用PyQt实现的窗口样式,默认使用的就是当前操作系统的原生窗口样式。如果其他Widget没有设置QStyle,则默认使用QApplication设置的QStyle。
一、设置窗口控件的风格
setStyle(QStyle style) #可以为每个Widget都设置风格
QStyleFactory.keys() #获得当前平台支持的原有的QStyle样式
QApplication.setStyle(QStyleFactory.create("WindowsXP")) #对QApplication设置QStyle样式
范例:
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Demo(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('设置窗口控件的风格')
layout = QHBoxLayout(self)
self.label = QLabel("Set Style:")
self.combobox = QComboBox()
self.combobox.addItems(QStyleFactory.keys())#增加多个显示样式
index = self.combobox.findText(QApplication.style().objectName(),QtCore.Qt.MatchFixedString)#获取当前窗口风格
self.combobox.setCurrentIndex(index)#设置当前窗口风格
self.combobox.activated[str].connect(self.stylechange)#设置槽函数,当Comobox中值改变时,窗口风格也随之改变
layout.addWidget(self.label)
layout.addWidget(self.combobox)
def stylechange(self,style):
QApplication.setStyle(style)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Demo()
form.show()
sys.exit(app.exec_())
运行效果如下:
二、设置窗口样式
- 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.WindowStaysOnBottomHint ,窗口始终处于底层位置。
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Demo(QMainWindow):
def __init__(self):
super().__init__()
self.resize(400,200)
self.setWindowTitle('设置窗口样式')
self.setWindowFlags(Qt.FramelessWindowHint)#设置无边框窗口样式
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Demo()
form.show()
sys.exit(app.exec_())
运行效果如下:
使用自定义的无边框窗口:
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Demo(QMainWindow):
def __init__(self):
super().__init__()
self.resize(400,200)
self.setWindowTitle('设置窗口样式')
self.setWindowFlags(Qt.FramelessWindowHint)#设置无边框窗口样式
self.setStyleSheet('background-color:pink;')#采用CSS将窗口设置粉红色
def showMaximized(self):
desk = QApplication.desktop()#得到桌面控件
rect = desk.availableGeometry()#得到屏幕可显示尺寸
self.setGeometry(rect)#设置窗口尺寸
self.show()#显示窗口
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Demo()
form.showMaximized()#调用最大化显示窗口
sys.exit(app.exec_())
运行效果如下: