设置窗口控件风格
在PyQt5中,可以通过QStyleFactory
来设置窗口控件的风格,我们可以先打印一下QStyleFactory.keys()
print(QStyleFactory.keys())
运行结果:
['windowsvista', 'Windows', 'Fusion']
这三种就是我们可以设置的风格。事实上,就一句话:QApplication.setStyle()
就可以设置,参数就是上面三个之一。
下面就通过一个窗口类来演示在窗口中设置窗口的风格。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import QtCore
import sys
class MultiWindow2(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("设置窗口风格")
self.resize(400, 200)
hbox = QHBoxLayout()
self.styleLabel = QLabel("设置窗口风格:")
# 创建一个下拉列表
self.styleComboBox = QComboBox()
self.styleComboBox.addItems(QStyleFactory.keys())
# 获取当前窗口风格
print(QApplication.style().objectName())
index = self.styleComboBox.findText(QApplication.style().objectName(), QtCore.Qt.MatchExactly)
# 将下拉列表当前显示的设置为当前窗口风格对应的字符串
self.styleComboBox.setCurrentIndex(index)
self.styleComboBox.activated[str].connect(self.handleStyleChanged)
hbox.addWidget(self.styleLabel)
hbox.addWidget(self.styleComboBox)
self.setLayout(hbox)
def handleStyleChanged(self, style):
QApplication.setStyle(style)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MultiWindow2()
main.show()
sys.exit(app.exec_())
运行效果:
设置窗口的样式
通过self.setWindowFlags()
来设置窗口样式。参数是Qt常量。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import QtCore
import sys
class WindowPattern(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("设置窗口样式")
self.resize(400, 200)
# 设置隐藏关闭按钮;设置窗口永远在最顶端
self.setWindowFlags(Qt.WindowMaximizeButtonHint | Qt.WindowStaysOnTopHint)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = WindowPattern()
main.show()
sys.exit(app.exec_())
用代码控制窗口的最大化和最小化
主要就是依靠一个函数来最大化最小化窗口,这个函数可以自己定义,也可以直接使用系统给的self.showMaximized()
。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import QtCore
import sys
class WindowPattern(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("设置窗口样式")
self.resize(400, 200)
vbox = QVBoxLayout()
self.btn1 = QPushButton("最大化的方式1")
# maximized是我们下面自定义的槽函数
self.btn1.clicked.connect(self.maximized)
vbox.addWidget(self.btn1)
self.btn2 = QPushButton("最大化的方式2")
# showMaximized是QWidget内置的槽函数
self.btn2.clicked.connect(self.showMaximized)
vbox.addWidget(self.btn2)
self.setLayout(vbox)
def maximized(self):
# 获得桌面对象
desktop = QApplication.desktop()
# 获取桌面可用尺寸
rect = desktop.availableGeometry()
# 将主窗口的尺寸设置为桌面尺寸
self.setGeometry(rect)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = WindowPattern()
main.show()
sys.exit(app.exec_())
运行结果:
最小化同理。
创建透明窗口
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class ScaleImage(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("创建透明窗口")
self.resize(400, 200)
# 设置窗口透明度,取值0-1
self.setWindowOpacity(0.5)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = ScaleImage()
main.show()
sys.exit(app.exec_())
运行效果: