Графический интерфейс пользователя 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()
Другие вопросы по тегам