PySimpleGUI:window.read() 与更新 window 或元素有何关系?

PySimpleGUI: How is window.read() related to updating a window or element?

我有一个 windows,它基本上是一个 Graph,它显示了带有一些叠加层的相机图像。

在尝试将代码清理为 OOP 样式时,我遇到了一些元素不再绘制或更新的问题。我知道这是由更新相对于 window.read() 的位置引起的,但我无法找出使其工作的正确方法。

到目前为止代码看起来像

import PySimpleGUI as sg

while True:

    gui.window['-MAIN-'].draw_text('some_text', (80, 15), color='black')

    event, values = gui.update()

    if event == 'Exit' or event == sg.WIN_CLOSED:
        break

    gui.window['-PAUSE-'].update(f'Paused')

    gui.window['-MAIN-'].erase()

    gui.window['-MAIN-'].draw_image(data=some_bytes)

我用的东西是

根据我在文档中阅读的内容,我假设一旦调用 window.read(),就会应用使用 element.update() 进行的更新 ti 元素。 对吗?

element.draw_image()Graph.erase() 是一样的吗?

因为我不确定它到底是如何工作的,所以我不知道在主循环中排序事物的好方法是什么。

从菜谱中的示例中我看到,通常放置在事件外观中的第一件事是对 window.read().

的调用

但是 Graph.erase() 什么地方比较好?在 window.read()?

之前还是之后

首先,定义布局和您的 window,如果 window 尚未通过选项 finalize=True 或方法 finalize 调用完成,则不会创建 GUI。

在 window 或 GUI 完成后,您可以在 window 或元素上做一些事情,例如调用 update 元素,在 sg.Canvas 上绘制或擦除图形,所有这些操作中的一部分只是更新 window 或元素,而不是真正在 GUI 上。

两种方法将更新 GUI,sg.Window.readsg.Window.refresh

如果您想立即更新 GUI,请调用 refresh,或者在您的 GUI 准备好响应来自 keyboard/mouse 的任何事件之前调用 read,否则。

大多数时候,事件循环中的第一个语句是 event, values = window.read(),然后为事件发生做一些事情。