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

sg_后台线程运行函数示例

import PySimpleGUI as sg
import math
import time
from threading import Eventdef calculate_sqrt_sum(window, stop_event):"""后台计算函数:计算1亿以内自然数的平方根之和"""total = 100_000_000batch_size = 1_000_000sum_result = 0.0start_time = time.time()try:for i in range(1, total + 1):sum_result += math.sqrt(i)# 进度更新if i % batch_size == 0 or i == total:progress = i / total * 100elapsed = time.time() - start_time# 发送进度更新事件(使用元组传递多个值)window.write_event_value('-PROGRESS-', (f'已处理 {i:,} 个数...',progress,sum_result,elapsed))# 检查停止信号if stop_event.is_set():window.write_event_value('-CANCELED-', None)return# 计算完成elapsed = time.time() - start_timewindow.write_event_value('-DONE-', (sum_result, elapsed))except Exception as e:window.write_event_value('-ERROR-', str(e))def main():stop_event = Event()layout = [[sg.Text('1亿以内自然数平方根之和计算器')],[sg.Text('计算进度:'), sg.ProgressBar(100, orientation='h', size=(30, 20), key='-PROGRESS-BAR-')],[sg.Multiline('', size=(50, 8), key='-OUTPUT-', autoscroll=True)],[sg.Text('结果:'), sg.Input('', key='-RESULT-', disabled=True, size=(30, 1))],[sg.Text('用时:'), sg.Input('', key='-TIME-', disabled=True, size=(15, 1)), sg.Text('秒')],[sg.Button('开始计算'), sg.Button('停止'), sg.Button('退出')]]window = sg.Window('后台计算示例', layout, finalize=True)window['-PROGRESS-BAR-'].update(0)while True:event, values = window.read()if event in (sg.WIN_CLOSED, '退出'):stop_event.set()breakelif event == '开始计算':window['-PROGRESS-BAR-'].update(0)window['-RESULT-'].update('')window['-TIME-'].update('')window['-OUTPUT-'].update('')stop_event.clear()window['开始计算'].update(disabled=True)window['停止'].update(disabled=False)# 启动后台线程window.start_thread(lambda: calculate_sqrt_sum(window, stop_event),'-THREAD-')elif event == '停止':stop_event.set()window['停止'].update(disabled=True)# 处理来自线程的事件elif event == '-PROGRESS-':message, progress, result, elapsed = values[event]window['-OUTPUT-'].print(message)window['-PROGRESS-BAR-'].update(progress)elif event == '-DONE-':result, elapsed = values[event]window['-RESULT-'].update(f'{result:.4f}')window['-TIME-'].update(f'{elapsed:.2f}')window['-OUTPUT-'].print('计算完成!')window['开始计算'].update(disabled=False)window['停止'].update(disabled=True)elif event == '-CANCELED-':window['-OUTPUT-'].print('计算已取消')window['开始计算'].update(disabled=False)window['停止'].update(disabled=True)elif event == '-ERROR-':sg.popup_error(f'计算出错: {values[event]}')window['开始计算'].update(disabled=False)window['停止'].update(disabled=True)window.close()if __name__ == '__main__':main()
http://www.jsqmd.com/news/27249/

相关文章:

  • portainer docker-compose.yml
  • 一行代码快速开发 AntdUI 风格的 WinForm 通用后台框架
  • 2025年优质的网带炉厂家选购指南与推荐
  • 2025年耐用的别墅电梯行业内口碑厂家排行榜
  • ui设计公司审美积累 | 扁平化app界面设计
  • 飞牛os初体验
  • 2025 年钢球厂家最新推荐榜:技术实力与市场口碑深度解析,筛选优质服务商420 不锈钢球 / 304 不锈钢球 / 316L 不锈钢球制造商推荐
  • 2025年正规的学校宿舍铁床厂家推荐及采购指南
  • 2025年短视频运营公司推荐:行业五大短视频公司深度解析
  • 2025年知名的五星酒店家具厂家最新用户好评榜
  • 2025 年广告喷绘公司最新推荐榜:优质企业实力解析与选择指南墙体广告喷绘广告牌 / 墙面广告喷绘 / 手绘广告喷绘推荐
  • 2025年正规的玻璃淋浴房配件品牌厂家排行榜
  • Python 格式化字符串 _ 优雅群发春节短信
  • 2025年升压充电芯片供货厂家权威推荐榜单:升降压充电管理IC/超级电容充电/开关型充电管理IC源头厂家精选
  • 2025年财税咨询会计公司:专业选择与企业成长指南
  • 2025年财税咨询会计公司:趋势、选择与临沂华恒的专业服务
  • 2025年口碑好的2000a母线槽多少钱一米品牌厂家排行榜
  • 2025 年夹丝玻璃厂家最新推荐榜,技术实力与市场口碑深度解析覆盖防火 / 艺术 / 酒店等多场景
  • 2025年国标电缆生产厂家权威推荐榜单:平方电缆/电缆规格 /电线电缆十大品牌源头厂家精选
  • 2025年可靠的烤漆龙骨热门厂家推荐榜单
  • 2025年评价高的矿物质防火电缆TOP品牌厂家排行榜
  • JOIST2025 传统题记录
  • 【ROS2学习笔记】分布式通信 - 教程
  • 详细介绍:C语言内存管理与命令行参数详解
  • MySQL双主Keepalived抢占配置手册
  • Blender柔体布料无限循环游戏动画插件 Revolve Mesh Looper
  • LR专业胶片模拟调色预设合集 Film Everything – All Packs
  • 2025年有实力的人防镀锌风管高评价厂家推荐榜
  • 2025年质量好的机械修复冷焊机厂家最新用户好评榜
  • 2025年双轴复卷机制造厂权威推荐榜单:全自动复卷机/自动切卷机/高速分条机源头厂家精选