跳转至

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" | 独特的暗黑紫色太空风格,神秘而极|

# 动态切换窗口的主题预设
window.set_preset("antigravity")

API 属性与方法

MkWindow 构造函数 &

MkWindow(use_custom_title_bar=True, preset="default", parent=None)
参数 类型 默认值 说明
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())