【问题标题】:What gui toolkit should I use with Pygame? [closed]我应该在 Pygame 中使用什么 gui 工具包? [关闭]
【发布时间】:2010-07-27 11:42:49
【问题描述】:

我正在制作一款需要能够在 pygame 界面中弹出 gui 元素的游戏。 This 问题不是我想要的,因为 wxPython 绕过 SDL 表面,而不是它内部。到目前为止,我只在这个问题空间中看到了 ocemppguGooeyPy

  • Ocemp 巨大而粗犷。它提到了 Python 2.3,而我在快速浏览 cvs 存储库时发现的最新文件已有 2 年历史。
  • 我无法让 GooeyPy 工作(尽管我没有很努力;eggs 和 Debian 不是朋友),v0.2 最后一次更新是在 2009 年 2 月。
  • 我一直在使用 pgu,但它似乎没有维护(上次更新 11/2009 并且原始维护者放弃了它)并且它开始显示它的年龄。它使用旧式类并引发字符串异常。

所以我要问你的问题是:我应该使用什么 gui 工具包来在你的 pygame 应用程序中弹出漂亮的可点击按钮?有没有在积极开发中?

编辑,2011 年 9 月

看起来 PGU 仍在维护中。最后一次提交是从 4 天前开始的。

【问题讨论】:

    标签: python user-interface widget pygame


    【解决方案1】:

    我不知道有任何 pygame gui 的东西,但推出你自己的应该不难(嘿,也许让它开源!)

    如果您只是做一些简单的按钮,您可以使用 GIMP 或 Photoshop 或其他工具来制作两个(或三个)图像 - 一个向上、向下和可能的悬停按钮,然后您将编写自己的事件循环/处理程序会做这样的事情:

    1. 获取鼠标位置
    2. 鼠标是否悬停在任何按钮上(并且没有按下任何按钮)?
    3. 显示悬停图像
    4. 鼠标悬停在按钮上并单击鼠标按钮?
    5. 与该按钮关联的触发事件
    6. 见 1

    这有点简化,但它至少应该给你一个起点(如果没有其他人有任何 pygame GUI 库)

    【讨论】:

    • 这是我试图避免的。我宁愿使用现有的库,如 pgu(获得 LGPL 许可)并更新它。它有 40 个源文件(不包括文档)和大约 7,000 行 Python 代码。
    • 这也是可能的——我从未使用过 pgu,所以我不知道它有多先进——但如果它已经完成了很多初始工作,那么你完全有理由继续更新它.无论如何,假设这 7,000 行是好行;)
    • 是的,我想我可能会这样做,假设 StackOverflow 没有向方程式添加任何魔法数据。
    • 然而,pgu 不仅仅是 GUI。它还具有(IIRC)3 种不同的瓷砖引擎和其他一些实用程序。因此,并非所有这些行都是 GUI。
    【解决方案2】:

    尽管它已经很老了,但你真的不需要为它提供一个 gui 库,你只需要使用 sprite。对于标签,您将获取一个精灵并为其提供要渲染的字体等。对于按钮,它继承标签并添加活动状态以检测更改并导致其他事情发生。滚动条的作用与按钮相同,只是更改标签或其他值

    【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      另请参阅以下问题的答案: What's the best way to add a GUI to a Pygame application?

      特别是,如果有人想使用 DavesGUI,我的 PyGame 预测试版 GUI 工具包,请给我发送电子邮件。在my reply, there 的末尾有一个指向我的电子邮件地址的链接。

      【讨论】:

        【解决方案5】:

        我创建了一个函数,您可以在 pygame 内部使用它而无需导入任何额外的库。

        def gui(x1, y1, x2, y2, button):
            mouseX, mouseY = pygame.mouse.get_pos()
            if mouseX >= x1 and mouseX <= x2 and mouseY >= y1 and mouseY <= y2:
                if button:
                    return True
                else:
                    return False
            else:
                return False
        

        你像这样调用函数(我以菜单为例)。

        topCornerX = #X coordinate of top right corner
        topCornerY = #Y coordinate of top right corner
        bottomCornerX = #X coordinate of bottom left corner
        bottomCornerY = #Y coordinate of bottom left corner
        
        while menu:
            for event in pygame.event.get():
                mouseLeft, mouseMiddle, mouseRight = pygame.mouse.get_pressed()
                if gui(topCornerX, topCornerY, bottomCornerX, bottomCornerY, '''mouseLeft, mouseMiddle, or mouseRight''')
                    menu = False
        

        然后你会继续你的输出。

        这通过获取矩形的坐标并将鼠标位置与矩形内部进行比较来工作,如果他们单击正确的按钮并且在矩形内部,则为 True。希望这会有所帮助。

        【讨论】:

        • 这是在屏幕上制作可点击图像的最简单方法,但如果您希望游戏拥有完整的选项菜单栏并类似于操作系统界面,这将变得乏味。
        【解决方案6】:

        我同意 milleja46 关于不使用 gui 的观点,

        我在这里找到了 2 个简单的菜单弹出程序:

        精致菜单:http://code.google.com/p/simple-pygame-menu/

        简单的弹窗:How to specify what actually happens when Yes/No is clicked with ctypes MessageBoxW?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-19
          • 2012-10-09
          • 1970-01-01
          • 2011-07-25
          • 2010-09-07
          • 2011-01-24
          • 2012-05-26
          • 2010-09-17
          相关资源
          最近更新 更多