#pysimplegui
Вопрос:
У меня есть окно Graph
, которое в основном показывает изображение камеры с некоторым наложением.
При попытке очистить код в стиле ООП я столкнулся с проблемой, что некоторые элементы больше не отображаются или не обновляются. Я знаю, что это вызвано тем, как обновление расположено относительно 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()
Из того, что я прочитал в документации, я предполагаю, что обновления элементов ti, которые сделаны с использованием element.update()
, применяются один раз window.read()
, вызывается. Это правильно?
И это то же самое для element.draw_image()
и Graph.erase()
?
Поскольку я не уверен, как именно это работает, я не знаю, какой был бы хороший способ упорядочить вещи в основном цикле.
Из примеров в кулинарной книге я увидел, что первое, что обычно помещается в виде события, — это призыв window.read()
.
Но для чего было бы подходящее место Graph.erase()
? До или после window.read()
?
Ответ №1:
Во-первых, определите макет и ваше окно, графический интерфейс не будет создан, если окно еще не завершено с помощью вызываемой опции finalize=True
или метода finalize
.
После завершения работы с окном или графическим интерфейсом вы можете что-то сделать с окном или элементами, например, вызвать update
элементы, нарисовать или стереть рисунки sg.Canvas
, все эти действия просто обновляют окно или элементы, на самом деле не в графическом интерфейсе.
Два метода обновят графический интерфейс, sg.Window.read
или sg.Window.refresh
.
Позвоните refresh
, если вы хотите немедленно обновить графический интерфейс, или позвоните read
до того, как ваш графический интерфейс будет готов к реагированию на любые события с клавиатуры/мыши или иначе.
В большинстве случаев первое утверждение в вашем цикле событий-это event, values = window.read()
«затем сделайте что-то, для чего произошло событие».