当前位置: 首页 > news >正文

sg.time 详解

在 PySimpleGUI 中,sg.time 模块主要涉及时间管理功能,核心包括时间获取、计时器控制及线程协作,以下为详细说明:

1. 时间获取:sg.time.time()

  • 功能:获取当前 Unix 时间戳(从 1970 年 1 月 1 日 UTC 开始的秒数,浮点数)。
  • 与 Python 标准库的关系
    import time
    # 以下两者等价
    current_time = time.time()          # Python 标准库
    current_time = sg.time.time()       # PySimpleGUI 封装
    
  • 典型用途
    • 计时:测量代码执行时间。
    start = sg.time.time()
    # 模拟耗时操作
    for _ in range(1000000):pass
    end = sg.time.time()
    print(f"耗时: {end - start:.3f} 秒")
    
    • 生成唯一 ID:结合毫秒级时间戳。
    timestamp = int(sg.time.time() * 1000)  # 转换为毫秒级整数
    

2. 计时器控制:window.timer_start()window.timer_stop()

  • 功能:在 GUI 中实现定时任务,避免阻塞主线程。
  • 关键参数
    • interval_ms:定时器间隔(毫秒)。
    • key:自定义事件键(默认 sg.TIMER_KEY)。
    • repeating:是否重复触发(默认为 False)。
  • 示例代码
    import PySimpleGUI as sglayout = [[sg.Text("计时器示例", key="-TEXT-")],[sg.Button("启动", key="-START-"), sg.Button("停止", key="-STOP-")]
    ]
    window = sg.Window("Timer Demo", layout)while True:event, values = window.read()if event == sg.WIN_CLOSED:breakelif event == "-START-":window.timer_start(interval=1000, key="-MY_TIMER-", repeating=True)elif event == "-STOP-":window.timer_stop(key="-MY_TIMER-")elif event == "-MY_TIMER-":  # 定时器触发事件current_time = sg.time.time()window["-TEXT-"].update(f"当前时间: {current_time:.2f}")window.close()
    
  • 注意事项
    • 定时器事件与按钮点击事件互不干扰。
    • 避免在定时器回调中执行耗时操作,否则可能阻塞界面。

3. 线程协作:window.write_event_value()

  • 功能:在线程中向主窗口发送事件,实现非阻塞通信。
  • 典型场景:后台任务进度更新。
  • 示例代码
    import PySimpleGUI as sg
    import threading
    import timedef background_task(window):for i in range(10):time.sleep(1)  # 模拟耗时操作window.write_event_value("-PROGRESS-", i)  # 发送进度事件window.write_event_value("-DONE-", "")  # 发送完成事件layout = [[sg.Text("后台任务进度:")],[sg.ProgressBar(10, orientation="h", size=(20, 20), key="-PROG-")],[sg.Button("启动任务", key="-START-")],[sg.Text("", key="-STATUS-")]
    ]
    window = sg.Window("Thread Demo", layout)while True:event, values = window.read()if event == sg.WIN_CLOSED:breakelif event == "-START-":threading.Thread(target=background_task, args=(window,), daemon=True).start()elif event == "-PROGRESS-":window["-PROG-"].update(values[event] + 1)  # 更新进度条elif event == "-DONE-":window["-STATUS-"].update("任务完成!")window.close()
    
  • 关键点
    • 使用 daemon=True 确保线程随主程序退出。
    • 通过 write_event_value() 发送事件,避免直接操作 GUI 组件。

4. 调试支持:sg.show_debugger_window()

  • 功能:实时监控变量、执行交互式命令。
  • 依赖条件
    • window.read() 必须设置 timeout 参数(如 timeout=200)。
  • 示例代码
    import PySimpleGUI as sglayout = [[sg.Text("调试器示例")],[sg.Input(key="-INPUT-")],[sg.Button("提交", key="-SUBMIT-")],[sg.Text("", key="-OUTPUT-")]
    ]
    window = sg.Window("Debugger Demo", layout)
    sg.show_debugger_window(location=(500, 100))  # 启动调试器while True:event, values = window.read(timeout=200)if event == sg.WIN_CLOSED:breakelif event == "-SUBMIT-":window["-OUTPUT-"].update(f"输入值: {values['-INPUT-']}")window.close()
    
  • 调试技巧
    • 在调试器 REPL 中直接修改变量(如 values['-INPUT-'] = 'new_value')。
    • 使用 sg.Print() 替代 print(),输出内容会显示在调试窗口。

5. 关键注意事项

  1. 避免阻塞主线程

    • 不要在事件循环中使用 time.sleep(),否则会导致界面冻结。
    • 替代方案:使用 window.read(timeout=...) 或线程。
  2. 时间精度

    • 在 Windows 上精度约为 15.6ms,Linux/macOS 上可能更高。
    • 需要微秒级精度时,可考虑 time.perf_counter()
  3. 时区处理

    • sg.time.time() 返回 UTC 时间戳,如需本地时间,需额外转换:
      import datetime
      local_time = datetime.datetime.fromtimestamp(sg.time.time())
      
http://www.jsqmd.com/news/25766/

相关文章:

  • 更新Vben5登录页的背景svg
  • 2025年斗式输送机生产商权威推荐榜单:链斗输送机/z型输送机/c型输送机源头生产商精选
  • [CSP-S 2021] 括号序列 题解
  • 游戏战斗服随记
  • 2025年阻燃输送带生产厂家权威推荐榜单:尼龙输送带/三叶输送带/输送带源头厂家精选
  • 详细介绍:数据驱动AI实战:从统计学习方法到业务落地的核心方法论
  • 2025年水平桥架源头厂家排行榜前十强
  • 2025年水平桥架供应厂家推荐榜:顶级品牌盘点
  • 2025年水平桥架公司 top 10 权威推荐
  • Transformers
  • macOS 终端配置全攻略:zsh、bash_profile、zprofile、zshrc 到 nvm 安装的完整科普
  • 2025年口碑好的冲孔铝单板公司排名前十推荐
  • 工作室项目管理系统开发常用命令
  • 《导航切换》案例
  • 技术探究:Air8000工业引擎赋能的WiFi AP文件管理系统实现剖析!
  • iOS 26 内存占用监控 多工具协同下的性能稳定性分析实战
  • 图像处理效率神器:光影魔术手 4.7.2,小白也能秒出专业效果
  • 2025年太原办理防爆3C认证服务商权威推荐榜单:内蒙古防爆3C认证/呼和浩特办理防爆CCC认证/辽宁申请防爆3C认证机构精选
  • 2025年250型压滤机滤布定制厂家权威推荐榜单:380型压滤机滤布/500型压滤机滤布/870型压滤机滤布源头厂家精选
  • 【IEEE出版|往届EI检索】第二届智能驾驶与智慧交通国际学术会议(IDST 2025)
  • 玖奇脑筋急转弯问答版小程序:趣味互动新选择
  • 忍痛割爱,Spring Boot 宣布移除 Undertow!!
  • Git 免密认证:Git Credential Helper
  • 类和对象-对象的特性project4
  • 人人聘招聘系统:多端协同的企业招聘解决方案
  • 喵喵估价回收系统:一站式闲置回收解决方案,赋能回收行业数字化升级
  • 向量数据库chroma
  • 云原生向量数据库Milvus知识大全,看完这篇就够了[基本概念、系统架构、主要组件、应用场景]
  • 测试数据准备难题?一个Dify工作流,让你告别“巧妇难为无米之炊”
  • 如何使用 vxe-table 展开行实现展开子表父子表格