# -*- coding: utf-8 -*- """把重做后的设置窗口截个图,方便看效果。""" from __future__ import annotations import sys import tempfile import time from pathlib import Path ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(ROOT / "windows")) OUT = ROOT / "_build" / "ui_preview.png" def main() -> int: from lanremote.config import Store from lanremote.ui import SetupWindow store = Store(Path(tempfile.mkdtemp(prefix="ui_shot_"))) window = SetupWindow(store) def ready(win): # 等界面画完 win.root.update_idletasks() win.root.update() time.sleep(0.6) win.root.update() try: from PIL import ImageGrab x = win.root.winfo_rootx() y = win.root.winfo_rooty() w = win.root.winfo_width() h = win.root.winfo_height() # 窗口阴影/边框留一点边 shot = ImageGrab.grab(bbox=(x - 2, y - 2, x + w + 2, y + h + 2)) shot.save(OUT) print(f" 截图: {OUT} {shot.size[0]}x{shot.size[1]}") except Exception as exc: # noqa: BLE001 print(f" 截图失败: {exc}") # 顺手打印一下界面上的元素 def walk(widget, depth=0): for child in widget.winfo_children(): text = "" try: text = str(child.cget("text")) except Exception: # noqa: BLE001 pass if text.strip(): print(" " + " " * depth + f"{child.winfo_class()}: {text[:44]}") walk(child, depth + 1) print(" 界面元素:") walk(win.root) win._cancel() window.show(on_ready=ready) return 0 if __name__ == "__main__": sys.exit(main())