如何在PySimpleGUI中无需用户输入更新元素(显示系统时间)
PySimpleGUI自动更新系统时间的解决方法
要实现无需用户输入自动更新界面上的系统时间,核心是让事件循环定时触发更新操作,而不是等待用户交互。你之前的问题出在window.read()默认是阻塞状态,只有用户操作(比如点击按钮)才会返回,导致event为None的分支根本不会执行。
可行方案:使用带超时参数的window.read()
通过给window.read()设置timeout参数,让它每隔指定毫秒自动返回一次,这样就能在循环里定时更新时间了。示例代码如下:
import PySimpleGUI as sg from datetime import datetime # 创建布局,用key标记要更新的文本元素 layout = [ [sg.Text("", key="TIME_DISPLAY", font=("微软雅黑", 24))] ] window = sg.Window("实时系统时间", layout, size=(300, 100)) while True: # 每隔1000毫秒(1秒)自动触发一次读取操作 event, values = window.read(timeout=1000) # 关闭窗口时退出循环 if event == sg.WIN_CLOSED: break # 获取当前时间并格式化 current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 更新文本元素内容 window["TIME_DISPLAY"].update(current_time) window.close()
关键说明
timeout=1000:设置每隔1秒让window.read()返回一次,此时事件会是sg.TIMEOUT_KEY(部分旧版本可能返回None),但不影响我们执行更新操作。- 每次循环都更新时间:不管触发的是超时事件还是用户其他操作,只要窗口没关闭,就会刷新时间显示。
- 无需用户交互:整个过程不需要点击按钮或其他操作,时间会自动每秒更新一次。
内容的提问来源于stack exchange,提问作者Hamza Beder
相关产品推荐
相关产品推荐

