Window 自定义窗口与标题栏¶
用于构建桌面应用的自定义无边框窗口和精美标题栏。支持多种现代化预设风格、边缘拉伸缩放、圆角效果和阴影。¶
MkWindow 无边框窗口¶
MkWindow 继承自 QMainWindow。当使用自定义标题栏时,它会自动去除系统原生边框,添加漂亮的阴影和圆角,并支持通过鼠标拖动窗口边缘进行缩放。
基础用法¶

from PySide6.QtWidgets import QLabel
from monkeyqt import MkWindow
# 创建一个使用自定义标题栏和 'shadcn' 预设风格的窗口window = MkWindow(use_custom_title_bar=True, preset="shadcn")
window.setWindowTitle("我的现代化应用")
# 设置中心窗口组件
label = QLabel("中心内容区")
window.setCentralWidget(label)
window.resize(800, 600)
MkTitleBar 自定义标题栏¶
MkTitleBar 是放置于 MkWindow 顶部的自定义标题栏,通常不需要开发者手动实例化。它支持六种现代化的主题风格预设:
| 预设名称 | 风格说明 |
| :--- | :--- |
| "default" | 经典的淡雅现代风格 "|
| "shadcn" | 极简白风格,边框细致,适合简约应用 "|
| "ida" | 深色科技感风格,适合工具、逆向等软件 "|
| "sunlogin" | 类似向日葵控制端的现代化深色风格 |
| "soda" | 极简黑风格,对比度强烈 "|
| "antigravity" | 独特的暗黑紫色太空风格,神秘而极|
API 属性与方法¶
MkWindow 构造函数 &¶
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
use_custom_title_bar |
bool |
True |
是否使用自定义无边框标题栏。为 False 时回退为系统原生窗口框架 |
preset |
str |
"default" |
自定义标题栏的主题预设,可选值为 "default", "shadcn", "ida", "sunlogin", "soda", "antigravity" |
MkWindow 核心方法¶
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
setCentralWidget(widget) |
QWidget |
None |
设置窗口的中心控件。如果是自定义无边框模式,该控件会被放置在自定义标题栏下方,且自动撑满空间 |
setWindowTitle(title) |
str |
None |
设置窗口标题,并自动同步更新自定义标题栏的文本 |
setWindowIcon(icon) |
QIcon |
None |
设置窗口图标,并自动同步缩放渲染在自定义标题栏左侧 |
set_preset(preset) |
str |
None |
动态更改标题栏和窗口容器的主题预设 |
set_border_radius(radius) |
int |
None |
设置窗口容器的圆角大小(像素,默认 8px)。最大化时圆角会自动失效以贴合屏幕 |
set_close_behavior(behavior) |
str |
None |
设置点击关闭按钮时的行为。可选值为 "close"(退出窗口))或 " ""hide"(隐藏窗口) |
示例代码¶
import sys
from PySide6.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
from PySide6.QtGui import QIcon
from monkeyqt import MkWindow, MkButton
class AppDemo(MkWindow):
def __init__(self):
# 实例化并使用 'antigravity' 预设
super().__init__(use_custom_title_bar=True, preset="antigravity")
self.setWindowTitle("Antigravity 极客窗口")
self.resize(700, 450)
# 1. 中心主面板 central_widget = QWidget()
layout = QVBoxLayout(central_widget)
layout.setContentsMargins(30, 30, 30, 30)
layout.setSpacing(20)
title_lbl = QLabel("🚀 欢迎使用 Antigravity 主题窗口")
title_lbl.setStyleSheet("color: #cdd6f4; font-size: 20px; font-weight: bold;")
layout.addWidget(title_lbl)
desc_lbl = QLabel("这是一个完全自定义的无边框窗口,支持缩放、圆角、窗口阴影和多套预设。" ))
desc_lbl.setStyleSheet("color: #a6adc8; font-size: 14px;")
layout.addWidget(desc_lbl)
# 添加一些按钮来测试交互
btn_layout = QVBoxLayout()
presets = ["default", "shadcn", "ida", "sunlogin", "soda", "antigravity"]
for p in presets:
btn = MkButton(f"切换至主题预设: {p}", type="info" if p == "default" else "primary")
# 通过 lambda 传递参数 btn.clicked.connect(lambda checked=False, name=p: self.set_preset(name))
btn_layout.addWidget(btn)
layout.addLayout(btn_layout)
layout.addStretch()
# 2. 设置中心控件
self.setCentralWidget(central_widget)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = AppDemo()
window.show()
sys.exit(app.exec())