pysimplegui - 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)
我使用的东西是
- 擦除主要成分
Graph.erase()
- 使用更改标签
element.update()
- 在图表上绘图
element.draw_image()
从我在文档中读到的内容,我假设使用element.update()
一次的更新 ti 元素window.read()
被调用。那是对的吗?
和 是一样的element.draw_image()
吗Graph.erase()
?
因为我不确定它是如何工作的,所以我不知道在主循环中订购东西的好方法是什么。
从食谱中的示例中,我看到通常放在事件外观中的第一件事是调用window.read()
.
但是什么地方适合Graph.erase()
呢?之前还是之后window.read()
?
解决方案
finalize=True
首先,定义布局和您的窗口,如果窗口尚未通过调用的选项或方法完成,则不会创建 GUI finalize
。
在窗口或 GUI 完成后,您可以在窗口或元素上执行某些操作,例如调用update
元素、在 上绘制或擦除图形sg.Canvas
,所有这些操作只是更新窗口或元素,而不是真正在 GUI 上。
两种方法将更新 GUI,sg.Window.read
或sg.Window.refresh
.
refresh
如果您想立即更新 GUI,请调用,或者在read
您的 GUI 准备好响应键盘/鼠标或其他任何事件之前调用。
大多数时候,事件循环中的第一条语句是event, values = window.read()
,然后针对发生的事件执行某些操作。
推荐阅读
- algorithm - 为什么系统重采样算法中的权重设置为 (1/N)?
- jquery - Laravel 中“选择的选择”的问题
- node.js - POST 请求的无效输入
- android - 如果我们使用不同类型的打印机,代码是否会发生变化?在使用蓝牙打印机(Android Java)打印条码时
- excel - 将一系列值与 Excel 中的单个值进行比较
- reactjs - React/React Native + Typescript 错误:找不到名称'INSERT FUNCTION NAME HERE'
- c++ - clang 与延迟模板解析、std::filesystem 和预编译头文件不兼容?
- sql - 在 where 子句中的情况下
- python-3.x - 使用类方法作为默认 kwarg 参数?
- d3.js - D3 分层:是否有深度限制