首页 > 解决方案 > PySimpleGUI:window.read() 与更新窗口或元素有何关系?

问题描述

我有一个基本上是一个窗口,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)

我使用的东西是

从我在文档中读到的内容,我假设使用element.update()一次的更新 ti 元素window.read()被调用。那是对的吗?

和 是一样的element.draw_image()Graph.erase()

因为我不确定它是如何工作的,所以我不知道在主循环中订购东西的好方法是什么。

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

但是什么地方适合Graph.erase()呢?之前还是之后window.read()

标签: pysimplegui

解决方案


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

在窗口或 GUI 完成后,您可以在窗口或元素上执行某些操作,例如调用update元素、在 上绘制或擦除图形sg.Canvas,所有这些操作只是更新窗口或元素,而不是真正在 GUI 上。

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

refresh如果您想立即更新 GUI,请调用,或者在read您的 GUI 准备好响应键盘/鼠标或其他任何事件之前调用。

大多数时候,事件循环中的第一条语句是event, values = window.read(),然后针对发生的事件执行某些操作。


推荐阅读