68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
窗口工具模块
|
||
负责窗口样式设置和对话框配置
|
||
"""
|
||
import ctypes
|
||
from .icon_utils import setup_dialog_icon
|
||
|
||
|
||
def set_dark_title_bar(window):
|
||
"""设置窗口为深色标题栏(Windows 10/11)
|
||
|
||
Args:
|
||
window: 窗口对象
|
||
"""
|
||
try:
|
||
hwnd = ctypes.windll.user32.GetParent(window.winfo_id())
|
||
DWMWA_USE_IMMERSIVE_DARK_MODE = 20
|
||
value = ctypes.c_int(2)
|
||
ctypes.windll.dwmapi.DwmSetWindowAttribute(
|
||
hwnd,
|
||
DWMWA_USE_IMMERSIVE_DARK_MODE,
|
||
ctypes.byref(value),
|
||
ctypes.sizeof(value)
|
||
)
|
||
except Exception as e:
|
||
print(f"Failed to set dark title bar: {e}")
|
||
|
||
|
||
def setup_dialog_window(dialog, title: str, width: int, height: int, parent=None, center: bool = True):
|
||
"""统一配置对话框窗口
|
||
|
||
Args:
|
||
dialog: 对话框对象
|
||
title: 窗口标题
|
||
width: 窗口宽度
|
||
height: 窗口高度
|
||
parent: 父窗口(可选)
|
||
center: 是否居中显示,默认 True
|
||
|
||
Returns:
|
||
配置好的对话框对象
|
||
"""
|
||
dialog.title(title)
|
||
dialog.geometry(f"{width}x{height}")
|
||
dialog.configure(fg_color="#2b2b2b")
|
||
|
||
# 设置图标
|
||
setup_dialog_icon(dialog)
|
||
|
||
# 设置为模态
|
||
if parent:
|
||
dialog.transient(parent)
|
||
dialog.grab_set()
|
||
|
||
# 设置深色标题栏
|
||
dialog.after(10, lambda: set_dark_title_bar(dialog))
|
||
|
||
# 居中显示
|
||
if center:
|
||
dialog.update_idletasks()
|
||
x = (dialog.winfo_screenwidth() // 2) - (width // 2)
|
||
y = (dialog.winfo_screenheight() // 2) - (height // 2)
|
||
dialog.geometry(f"{width}x{height}+{x}+{y}")
|
||
|
||
return dialog
|