PySimpleGUI列不会更新

2024-05-19 05:07:52 发布

您现在位置:Python中文网/ 问答频道 /正文

正在尝试使用PySimpleGUI构建简单窗口。我想有一个列表的行与信息有关的视频存储在一个列表。这是我的代码:

layout = [
    [sg.Text("Clique para iniciar:")],
    *[[sg.Button(k)] for k in botoes],
    # [sg.Column([[sg.Text('Passos')]], key = 'CONTAINER_STATUS')],
    [sg.Text('Índice Vídeo Selecionado:'), sg.In(key=0), sg.In(key=1, enable_events=True)],
    # [sg.Text('Status Vídeos: ')],
    [sg.Text('Vídeo'), sg.Text('Status Vídeo'), sg.Text('Status Thumbnail')],
    [sg.Column([[sg.Text('test'), sg.Text('test2')],[sg.Text('test3'),sg.Text('test4')]], key='CONTAINER_VIDEOS', size= (50, 50))],
]

window = sg.Window("Iniciar Processamento de Vídeo", layout)

def get_layout_video(video):
    status = video.status.name if video.status is not None else ''
    status_thumb = video.thumbnail.status.name if video.thumbnail.status is not None else ''
    try:
        layout = [
            sg.Text(video.id_video_original), sg.Text(status), sg.Text(status_thumb)
        ]
        return layout
    except Exception as e:
        print(e)
        return []

# Create an event loop
print('Running')
while True:
    event, values = window.read()

    window["CONTAINER_VIDEOS"].update([get_layout_video(v) for v in sessao.videos] if len(sessao.videos) > 0 else [[]])
    if event == sg.WIN_CLOSED:
        break

我已经调试了几种不同的可能性。导致列表更改的事件已被忽略,但我相信它们会起作用。get_layout_video的结果是正确的,它看起来像一个正常的列布局,类似于测试布局。我还尝试了一个空列表[[]],但什么也没发生。该列只保留其原始值。当我尝试其他类型的元素(例如sg.Text)时,它会正常工作,更新值。我做错了什么


Tags: keytextevent列表getifcontainervideo
1条回答
网友
1楼 · 发布于 2024-05-19 05:07:52

我找不到如何直接更改sg的列,但我制作了一个更新函数来解决您的问题,它将关闭并用更新的列重新创建sg窗口

下面是更新列的代码

def update_column():
global window
layout = [
    [sg.Text("Clique para iniciar:")],
    *[[sg.Button(k)] for k in botoes],
    # [sg.Column([[sg.Text('Passos')]], key = 'CONTAINER_STATUS')],
    [sg.Text('Índice Vídeo Selecionado:'), sg.In(key=0), sg.In(key=1, enable_events=True)],
    # [sg.Text('Status Vídeos: ')],
    [sg.Text('Vídeo'), sg.Text('Status Vídeo'), sg.Text('Status Thumbnail')],
    [sg.Column([get_layout_video(v) for v in sessao.videos] if len(sessao.videos) > 0 else [[]], key='CONTAINER_VIDEOS', size=(150, 50))],
]
window.close()
window = sg.Window("Iniciar Processamento de Vídeo", layout)

print('Running')
while True:
    event, values = window.read()
    update_column()
    if event == sg.WIN_CLOSED:
        break

部分照片:

before I click anything:

after I click something:

相关问题 更多 >

    热门问题