如何获取threading.Timer中调用的check_is_window_open函数返回值?
解决方案
方案1:让检查函数自行处理后续逻辑(推荐)
直接修改检查函数,让它在检测到窗口未打开时自动重启定时器,窗口打开时直接执行自动化操作,无需额外获取返回值:
from pywinauto import Application from threading import Timer def check_is_window_open(): try: app = Application(backend='uia').connect(title='Some Application') window = app['Some Application'] # 窗口已打开,执行自动化逻辑 perform_automation(window) return except: # 窗口未打开,10秒后再次检查 Timer(10, check_is_window_open).start() def perform_automation(window): # 这里编写你的自动化操作代码 print("开始执行自动化操作") # 示例:最大化窗口 window.maximize() # 启动首次检查 check_is_window_open()
方案2:用共享变量传递检查结果
如果需要在独立逻辑中处理返回值,可以通过全局变量或类实例变量存储检查结果,再触发后续判断:
from pywinauto import Application from threading import Timer check_result = 0 def check_is_window_open(): global check_result try: app = Application(backend='uia').connect(title='Some Application') window = app['Some Application'] check_result = 1 except: check_result = 0 # 根据结果执行后续逻辑 handle_result() def handle_result(): global check_result if check_result == 1: app = Application(backend='uia').connect(title='Some Application') perform_automation(app['Some Application']) else: Timer(10, check_is_window_open).start() def perform_automation(window): print("执行自动化操作") # 你的自动化代码 # 启动首次检查 check_is_window_open()
方案3:主线程循环检查(最直观)
如果不需要多线程,直接在主线程用循环+睡眠的方式,可直接获取返回值:
from pywinauto import Application import time def check_is_window_open(): try: app = Application(backend='uia').connect(title='Some Application') window = app['Some Application'] return 1, window except: return 0, None def perform_automation(window): print("执行自动化操作") # 你的自动化代码 # 循环检测直到窗口打开 while True: result, window = check_is_window_open() if result == 1: perform_automation(window) break time.sleep(10)
内容的提问来源于stack exchange,提问作者Sayandip Ghatak
相关产品推荐
相关产品推荐

