Я пытаюсь добавить некоторые элементы графического интерфейса (диалоговые окна с кнопками) в игру, которую пишу с помощью pygame.Я искал приличный набор инструментов для графического интерфейса и получил pgu .В любом случае, я пытаюсь заставить его открыть диалоговое окно, которое оно делает (вроде как), но оно не закрывается.
Вот упрощенная версия моего кода, которая просто показывает поведение, которое язабота о:
import pygame, sys
from pgu import gui
screen = None
WIDTH = 640
HEIGHT = 480
def init_pygame():
global screen
pygame.display.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT), pygame.DOUBLEBUF)
pygame.display.set_caption('Testing PGU')
class SimpleDialog(gui.Dialog):
def __init__(self):
title = gui.Label("Spam")
main = gui.Container(width=20, height=20)
# I patched PGU to use new style classes.
super(SimpleDialog, self).__init__(title, main, width=40, height=40)
def close(self, *args, **kwargs):
print "closing"
return super(SimpleDialog, self).close(*args, **kwargs)
def run():
init_pygame()
app = gui.App()
dialog = SimpleDialog()
app.init(dialog)
app.paint(screen)
pygame.display.flip()
while True:
app.paint(screen)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 3: # right mouse button
print "opening"
dialog.open()
else:
app.event(event)
elif event.type == pygame.QUIT:
sys.exit()
else:
app.event(event)
if __name__=='__main__':
run()
Поведение, которое я вижу: открывается окно с полноэкранной версией диалогового окна.Ничто из того, что я сделаю, не закроет его, хотя щелчок правой кнопкой мыши напечатает «открытие» на моей консоли, а щелчок левой кнопкой мыши по маленькому красному кружку заставит его напечатать «закрытие».Похоже, что диалоговое окно использует всю фоновую поверхность, а не меньшую только для себя.
Поведение, которое я хотел бы видеть: появляется большой черный экран (я нарисую его позже)и когда я щелкаю по нему правой кнопкой, открывается небольшое окно.Когда я щелкаю левой кнопкой мыши по кнопке закрытия, окно исчезает.
Я подозреваю, что это связано с тем, что я не использую рабочий стол, но я не хочу, чтобы вся игра была внутриGUI.
Теперь, просто для ясности, вопрос: как мне изменить мой код, чтобы перейти от поведения, которое я наблюдаю, к поведению, которое я хотел бы видеть?Я открыт для использования другой библиотеки графического интерфейса пользователя, если кто-то знает о чем-то более позднем, чем pgu.