4

pygame で作成しているゲームにいくつかの GUI 要素 (ボタン付きのダイアログ ボックス) を追加しようとしています。まともなGUIツールキットを探したところ、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 よりも最近維持されているものを知っている場合、私は別の gui ライブラリを使用することにオープンです。

4

2 に答える 2

3

他の誰かがこれをやりたいと思った場合に備えて、私はうまくいくものを見つけました:空のコンテナを作成し、それを呼び出しますapp.init()

empty = gui.Container(width=WIDTH, height=HEIGHT)
gui.init(empty)
于 2010-08-22T14:24:38.700 に答える