Графический интерфейс пользователя PyImgui не отображается
Итак, я только начал кодировать gui на python, и после кодирования некоторых вещей в tkinter мне показалось, что я мог бы использовать imgui, поскольку я знаю кое-что об этом из C++, теперь начинаю читать документы, и почему-то окно imgui не отображается. Я просто вижу, как консоль открывается на миллисекунду, но нет графического интерфейса.
# initilize imgui context (see documentation)
imgui.create_context()
imgui.get_io().display_size = 100, 100
imgui.get_io().fonts.get_tex_data_as_rgba32()
# start new frame context
imgui.new_frame()
# open new window context
imgui.begin("Your first window!", True)
# draw text label inside of current window
imgui.text("Hello world!")
# close current window context
imgui.end()
# pass all drawing comands to the rendering pipeline
# and close frame context
imgui.render()
imgui.end_frame()
i feel like i didnt choose any engine to render buid im unshure
1 ответ
Да, если вы не выберете внутренний рендерер для pyimgui, он ничего не отобразит. Я думаю, вы можете найти файл imgui.ini с интерпретацией imgui того, что вы просили, в текущем каталоге, но вы не получите никакого графического вывода.
Чтобы получить графический вывод, выберите средство визуализации, как в этом файле в главном репозитории pyimgui:https://github.com/swistakm/pyimgui/blob/master/doc/examples/integrations_pygame.py
Обратите внимание: пока я пишу это, большинство, но не все примеры в этом каталоге работают: https://github.com/swistakm/pyimgui/tree/master/doc/examples
Пример "все в одном" у меня не сработал, а пример SDL2 потребовал изменения:
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 16)
кому:
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4)
поскольку мой графический процессор, похоже, не поддерживает 16-точечную мультисэмплинг.
Кроме того, эти примеры не очень хорошо работают с Python3, поскольку printts() ошибочны и не будут выводить полезную ошибку:
print("Error: SDL could not initialize! SDL Error: " + SDL_GetError())
должно быть:
print("Error: SDL could not initialize! SDL Error: ", SDL_GetError())
Итак, если вы получите какие-либо ошибки в этих строках, вы знаете, что делать.:-)
Наконец, для будущих искателей, вот краткое вырезание и вставка версии pygame, которая работает для меня (с https://github.com/swistakm/pyimgui/blob/master/doc/examples/integrations_pygame.py). Я запустил его с помощью python 3.6:
#!/usr/bin/env python3
from __future__ import absolute_import
import sys
import pygame
import OpenGL.GL as gl
from imgui.integrations.pygame import PygameRenderer
import imgui
def main():
pygame.init()
size = 800, 600
pygame.display.set_mode(size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE)
imgui.create_context()
impl = PygameRenderer()
io = imgui.get_io()
io.display_size = size
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
impl.process_event(event)
imgui.new_frame()
if imgui.begin_main_menu_bar():
if imgui.begin_menu("File", True):
clicked_quit, selected_quit = imgui.menu_item(
"Quit", 'Cmd+Q', False, True
)
if clicked_quit:
exit(1)
imgui.end_menu()
imgui.end_main_menu_bar()
imgui.show_test_window()
imgui.begin("Custom window", True)
imgui.text("Bar")
imgui.text_colored("Eggs", 0.2, 1., 0.)
imgui.end()
# note: cannot use screen.fill((1, 1, 1)) because pygame's screen
# does not support fill() on OpenGL sufraces
gl.glClearColor(1, 1, 1, 1)
gl.glClear(gl.GL_COLOR_BUFFER_BIT)
imgui.render()
impl.render(imgui.get_draw_data())
pygame.display.flip()
if __name__ == "__main__":
main()