代码之家  ›  专栏  ›  技术社区  ›  nmichaels

使用pgu在pygame中生成弹出窗口

  •  3
  • nmichaels  · 技术社区  · 14 年前

    我正在尝试将一些GUI元素(带有按钮的对话框)添加到我用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()
    

    我看到的行为:一个窗口以全屏版本的对话框打开。我所做的一切都不会关闭它,尽管右键单击将在我的控制台上打印“打开”,左键单击小红圈将使它打印“关闭”。看起来对话框使用的是整个背景面,而不是一个较小的背景面。

    我想看到的行为:一个大的黑屏出现了(稍后我会画出来),当我右击它时,一个小窗口打开。当我左键单击关闭按钮时,窗口就消失了。

    我怀疑这与我没有使用桌面这一事实有关,但我不希望整个游戏都存在于图形用户界面中。

    现在,为了明确起见,问题是:如何修改代码以从我看到的行为到我想看到的行为?如果有人知道比PGU更新维护的内容,我可以使用不同的GUI库。

    1 回复  |  直到 14 年前
        1
  •  3
  •   nmichaels    14 年前

    如果有人想这样做,我发现了一些有用的东西:创建一个空容器并调用 app.init() 关于它。

    empty = gui.Container(width=WIDTH, height=HEIGHT)
    gui.init(empty)
    
    推荐文章