PySDL2: создание окна без полей

#python #borderless #pysdl2

#python #без полей #pysdl2

Вопрос:

Я пытался найти, как я мог бы создать окно без полей (не созданное с использованием типичной границы Windows) в PySDL2.

Я посмотрел, какие ресурсы я мог бы найти в Интернете, но не смог точно определить ничего, что подсказало бы мне, как это сделать, несмотря на то, что это, по-видимому, возможно.


Исследования:

  1. В этой ссылке указано, что в большинстве случаев у вас есть граница и строка заголовка вокруг вашего окна, но вы никогда не вдавались в подробности о том, как ими манипулировать.

  2. Я просмотрел некоторые ссылки на API для окна SDL и не увидел, что границами вообще можно манипулировать. (Не указано, что их не может быть, просто не упоминается)


Несмотря на то, что я не нашел ничего, связанного с PySDL2, я нашел по этой ссылке, что:

 sdl.setWindowBordered(window, bordered)
Sets the border state of a window.
  

К сожалению, я не могу заставить это работать в моем простом примере сценария.

Спасибо, что посмотрели!

Комментарии:

1. Обновил мой ответ, чтобы использовать sdl2.ext…

Ответ №1:

Вам нужно убедиться, что у вас есть флаг : SDL_WINDOW_BORDERLESS .

Полный пример:

 import sys
import sdl2.ext

sdl2.ext.init()

window = sdl2.ext.Window("Hello World!", size=(640, 480), flags=sdl2.SDL_WINDOW_BORDERLESS)
window.show()

processor = sdl2.ext.TestEventProcessor()
processor.run(window)
  

Слегка изменив ваш скрипт, мы получаем:

 import sys
import sdl2.ext

def run():
    sdl2.ext.init()
    W = sdl2.ext.Window("Default",size=(400,300), flags=sdl2.SDL_WINDOW_BORDERLESS)
    W.show()
    running = True
    while running:
        events = sdl2.ext.get_events()
        for event in events:
            if event.type == sdl2.SDL_QUIT:
                running = False
                break
        W.refresh()
    return 0

if __name__ == "__main__":
    sys.exit(run())
  

Комментарии:

1. эй, кажется, это работает! Спасибо. Я просто хотел знать, почему вообще ничего не появилось. Я как бы ожидал какого-то блока без полей. Я вижу контур при наведении курсора мыши на значок открытия в режиме ожидания, но это все. Нужно ли мне сначала чем-то заполнить окно?

2. @Owatch: по умолчанию окно просто черное, если вы это имеете в виду. Однако вы можете рисовать в нем что-то, и это не сделает его просто черным.

3. Ну, на самом деле это было полностью прозрачно. (Вообще без фона). Но мне удалось добавить его сейчас, используя SoftwareSpriteRenderSystem и пример из учебника! Возможно ли создать свой собственный тип окна? Например, добавить кнопку закрытия и сворачивания в окно самостоятельно?

4. @Owatch: я полагаю, вы можете сами создавать кнопки и вызывать соответствующие события SDL при нажатии на них. Но это уже совсем другой вопрос…