窗口配置

你可以通过属性来读取和修改窗口的各项配置。所有属性修改会 实时同步 到后端窗口。

小心

窗口属性必须在 mainloop() 之前或事件回调中设置。 如果在主循环运行期间从非 UI 线程修改属性,可能导致未定义行为。

窗口标题

window = cm.Window()
window.title = "MyWindow"          # 设置标题,立即更新窗口标题栏
print(window.title)               # 读取当前标题

窗口大小

window.size = (800, 600)          # 设置大小 (width, height)
print(window.size)                # 读取大小

备注

修改 size 属性会触发后端的 set_size() 方法,同时重新初始化 Cairo 画布 (调用 cairo_reinit_surface())。因此窗口上已有的绘制内容会被清空。

窗口位置

window.pos = (100, 100)           # 设置位置 (x, y),相对于屏幕左上角
print(window.pos)                 # 读取位置

备注

窗口位置由后端 SDL2 管理,pos setter 会调用 SDL_SetWindowPosition。 Genesis 后端会在窗口初始化时自动同步 SDL2 的窗口位置到 Charmy。

窗口背景

背景使用 (R, G, B) 或 (R, G, B, A) 元组表示,值范围为 0-255:

window.background = (255, 255, 255)      # 白色背景(不透明)
window.background = (0, 0, 0, 200)       # 半透明黑色背景(A=200)
window.background = (150, 150, 150)      # 灰色背景(默认值)

背景色修改会触发窗口重绘。如果设置为透明背景(A=0), 后端仍会绘制一个透明层,但不会遮挡后面的内容。

窗口图标

图标支持多种格式:

# 从文件路径设置
window.icon = "path/to/icon.png"

# 从 bytes 数据设置
with open("icon.png", "rb") as f:
    window.icon = f.read()

# 从 PIL Image 对象设置
from PIL import Image
img = Image.open("icon.png")
window.icon = img

备注

Genesis 后端通过 SDL2 的 SDL_SetWindowIcon 设置图标, 内部将图标数据写入临时文件再加载。图标格式需要 SDL2 支持的类型(通常是 PNG 或 BMP)。

其他窗口属性

# 窗口可见性(只读)
print(window.visible)             # True / False

# 窗口是否存活(只读,调用 destroy() 后为 False)
print(window._alive)              # 注意:以下划线开头的属性为内部属性

参见

更多窗口相关的 API 请参考 WindowEntity 的自动生成文档。