PySimpleGUI中如何实现多个GIF动画同步更新?
解决PySimpleGUI中多GIF同步动画问题
核心问题是所有Image元素共用了同一个key -post-,PySimpleGUI中key是控件的唯一标识,因此每次调用window['-post-'].UpdateAnimation()只会更新第一个匹配的控件,其他GIF自然无法动起来。
以下是修改后的完整代码,可实现所有GIF同步播放:
import PySimpleGUI as sg sg.theme('darkgray12') colors = (sg.theme_background_color(), sg.theme_background_color()) counter = 1 firstTime = True def post(img_key): # 为每个Image生成唯一key post_layout = [sg.Frame('',[ [sg.Image('1.gif', size=(600, 600), key=img_key)], ], key=f'-POST-{counter}')] return post_layout layout = [ [sg.Frame(title='', layout=[ [sg.pin(sg.Button('LOAD', key='-LOAD-POST-')), sg.Push(), sg.pin(sg.Text('#10', key='-POST-COUNTER-TEXT-'))], [sg.pin(sg.Column([], size=(700, 600), key='-COL1-', scrollable=True, vertical_scroll_only=True, expand_y=True, expand_x=True, element_justification='c'))], ], key='-MAIN-FRAME-')], ] window = sg.Window('Fixed - All GIFs animate', layout, size=(800, 600), grab_anywhere=True, font=('Montserrat', 9, 'bold'), element_justification='c') # 存储所有Image控件的key,用于批量更新动画 image_keys = [] while True: event, values = window.read(100) if event == sg.WIN_CLOSED: break if firstTime: for i in range(10): img_key = f'-POST-IMAGE-{counter}' image_keys.append(img_key) window.extend_layout(window['-COL1-'], [post(img_key)]) window.refresh() window['-COL1-'].contents_changed() counter += 1 firstTime = False window['-POST-COUNTER-TEXT-'].update(f'#{counter - 1}') if event == '-LOAD-POST-': if counter <= 40: added = 0 for i in range(10): if counter > 40: break img_key = f'-POST-IMAGE-{counter}' image_keys.append(img_key) window.extend_layout(window['-COL1-'], [post(img_key)]) window.refresh() window['-COL1-'].contents_changed() counter += 1 added += 1 window['-POST-COUNTER-TEXT-'].update(f'#{counter - 1}' + ('(MAX)' if counter > 40 else '')) # 遍历所有Image控件,逐个更新动画实现同步 for key in image_keys: window[key].UpdateAnimation('1.gif', 10) window.close()
关键改动说明:
- 修改
post函数,新增img_key参数,确保每个Image控件拥有唯一标识key - 新增
image_keys列表,记录所有生成的Image控件key,方便后续批量操作 - 主循环末尾遍历
image_keys,对每个Image控件调用UpdateAnimation,实现全量同步动画 - 修复LOAD按钮的计数器判断逻辑,确保最多只加载40个帖子
内容的提问来源于stack exchange,提问作者MrLucifer
相关产品推荐
相关产品推荐

