如何用Python实现双窗口联动?使目标窗口跟随主窗口的各类行为
窗口联动完整实现方案
你原来的代码只处理了部分状态同步,要实现窗口B完全跟随窗口A的行为,得补上持续监听、位置同步这两个核心环节,同时优化状态同步逻辑。下面是可直接运行的完整代码:
from pywinauto.application import Application import time def anchor_windows(window_a, window_b): # 获取顶层窗口,避免操作子窗口 win_a = window_a.top_level_parent() win_b = window_b.top_level_parent() # 同步窗口状态(最小化/最大化/正常) state_a = win_a.get_show_state() state_b = win_b.get_show_state() if state_a != state_b: if state_a == 2: # 窗口A最小化 win_b.minimize() elif state_a == 3: # 窗口A最大化 win_b.maximize() elif state_a == 1: # 窗口A恢复正常 win_b.restore() time.sleep(0.1) # 正常状态下同步位置:让B粘在A下方 if state_a == 1 and state_b == 1: # 获取A的位置和尺寸 rect_a = win_a.rectangle() # 获取B原有高度,只调整位置和宽度 rect_b = win_b.rectangle() win_b.set_window_pos( x=rect_a.left, y=rect_a.top + rect_a.height(), width=rect_a.width(), height=rect_b.height(), repaint=True ) if __name__ == "__main__": # 连接到目标窗口(记事本和计算器) app_a = Application().connect(title="notepad", timeout=10) app_b = Application().connect(title="calc", timeout=10) # 持续监听并同步窗口行为 try: while True: anchor_windows(app_a, app_b) time.sleep(0.2) # 控制监听频率,平衡响应速度和资源占用 except KeyboardInterrupt: print("监听已停止")
关键改进说明:
- 持续监测:通过while循环持续跟踪窗口A的状态变化,确保任何操作都能实时同步到窗口B。
- 状态同步优化:直接对比A和B的状态,不一致时立即同步,覆盖所有状态转换场景(最小化→最大化、正常→最小化等)。
- 位置贴合逻辑:仅在窗口处于正常状态时调整位置,让B的左边缘与A对齐、顶部紧贴A的底部,宽度和A保持一致,完美实现“粘在下方”的效果。
- 资源友好:0.2秒的循环间隔既保证响应及时,又不会过度占用CPU资源。
内容的提问来源于stack exchange,提问作者kudmich
相关产品推荐
相关产品推荐

