#python #borderless #pysdl2
#python #без полей #pysdl2
Вопрос:
Я пытался найти, как я мог бы создать окно без полей (не созданное с использованием типичной границы Windows) в PySDL2.
Я посмотрел, какие ресурсы я мог бы найти в Интернете, но не смог точно определить ничего, что подсказало бы мне, как это сделать, несмотря на то, что это, по-видимому, возможно.
Исследования:
-
В этой ссылке указано, что в большинстве случаев у вас есть граница и строка заголовка вокруг вашего окна, но вы никогда не вдавались в подробности о том, как ими манипулировать.
-
Я просмотрел некоторые ссылки на 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 при нажатии на них. Но это уже совсем другой вопрос…