1、窗口标志,可以通过相关参数设置整个窗口的外观。通过setWindowFlags()方法传递相关参数的值可以修改整个窗口的外观。(可以设置窗口也可以获取窗口。)
窗口样式也哟多种QWidget(),也可以换成其他的Qt.sheet()是一个窗口或者部件Macintosh表单。
窗口无边框、手动添加标题栏控件等,设计自己的界面。
2、案例(一)创建一个窗口、无边框无标题栏窗口半透明、自定义最小化、最大化关闭按钮(因为去掉了窗口标题栏,所以需要自定最大化、最小化等按钮)、支持拖拽用户区域移动。
①:去掉窗口标题栏
# 设置窗口无边框,方法一
window = QWidget(flags=Qt.FramelessWindowHint)
# 方法二
window = QWidget()
window.setWindowFlags(Qt.FramelessWindowHint)
②:设置窗口透明度
# 设置窗口透明度
window.setWindowOpacity(0.9)
③:自定义最小化、最大化以及关闭按钮(整个窗口右上角创建三个独立按钮,倒是逐个监听他们的事件方法)(可以通过信号与槽执行该功能,也可以通过执行该方法去执行该功能。)
# def close():
# window.close()
# close_btn.pressed.connect(close)
close_btn.pressed.connect(window.close)
3、代码重构:当代码特别多,修改困难时,就需对其重构,(封装重构)即将他封装为一个类。
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 设置窗口无边框
self.setWindowFlags(Qt.FramelessWindowHint)
self.setWindowOpacity(0.9)
# 设置控件
self.setWindowTitle("顶层窗口操作案例")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
def max_normal():
if self.isMaximized():
self.showNormal()
max_btn.setText("最大化")
else:
self.showMaximized()
max_btn.setText("恢复")
# 公共数据
top_margin = 10
btn_w = 80
btn_h = 40
close_btn = QPushButton(self)
close_btn.setText("关闭")
close_btn.resize(btn_w, btn_h)
# close_btn_w = close_btn.width()
window_w = self.width()
close_btn_x = window_w - btn_w
close_btn_y = top_margin
close_btn.move(close_btn_x, close_btn_y)
# def close():
# window.close()
# close_btn.pressed.connect(close)
close_btn.pressed.connect(self.close)
# 设置最大化按钮
max_btn = QPushButton(self)
max_btn.setText("最大化")
max_btn.resize(btn_w, btn_h)
max_btn_x = close_btn_x - btn_w
max_btn_y = top_margin
max_btn.move(max_btn_x, max_btn_y)
max_btn.pressed.connect(max_normal)
mini_btn = QPushButton(self)
mini_btn.setText("最小化")
mini_btn.resize(btn_w, btn_h)
mini_btn_x = max_btn_x - btn_w
mini_btn_y = top_margin
mini_btn.move(mini_btn_x, mini_btn_y)
mini_btn.pressed.connect(self.showMaximized)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())