Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我应该在Pygame中使用什么gui工具包?_Python_User Interface_Widget_Pygame - Fatal编程技术网

Python 我应该在Pygame中使用什么gui工具包?

Python 我应该在Pygame中使用什么gui工具包?,python,user-interface,widget,pygame,Python,User Interface,Widget,Pygame,我正在制作一个需要能够在pygame界面中弹出gui元素的游戏。问题不是我想要什么,因为wxPython围绕SDL曲面,而不是在它里面。到目前为止,我只看到,在这个问题空间 Ocemp巨大而粗糙。它提到了Python2.3,我在快速浏览cvs repo时发现的最新文件是2年前的 我无法让GooeyPy工作(尽管我没有努力;eggs和Debian不是朋友),v0.2最后一次更新是在2009年2月 我一直在使用pgu,但它似乎没有得到维护(上一次更新于2009年11月,最初的维护者放弃了它),而且

我正在制作一个需要能够在pygame界面中弹出gui元素的游戏。问题不是我想要什么,因为wxPython围绕SDL曲面,而不是在它里面。到目前为止,我只看到,在这个问题空间

  • Ocemp巨大而粗糙。它提到了Python2.3,我在快速浏览cvs repo时发现的最新文件是2年前的
  • 我无法让GooeyPy工作(尽管我没有努力;eggs和Debian不是朋友),v0.2最后一次更新是在2009年2月
  • 我一直在使用pgu,但它似乎没有得到维护(上一次更新于2009年11月,最初的维护者放弃了它),而且它开始显示出它的年龄。它使用老式类并抛出字符串异常
我的问题是:我应该使用什么gui工具包在pygame应用程序中弹出可点击的按钮?有没有积极的发展

编辑,2011年9月


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

我不知道pygame gui的任何东西,但自己提交应该不会太难(嘿,也许是开源吧!)

如果你只是做一些简单的按钮,你可以使用GIMP或Photoshop或其他东西来制作两(或三)个图像——一个向上、向下和可能的悬停按钮,那么你可以编写自己的事件循环/处理程序来完成如下操作:

  • 获取鼠标位置
  • 鼠标是否在任何按钮上(并且没有按下任何按钮)
  • 显示悬停图像
  • 是否将鼠标放在按钮上并单击鼠标按钮
  • 与该按钮关联的火灾事件
  • 见1
  • 这有点简化,但至少应该为您提供一个起点(如果没有其他人拥有任何pygame GUI库)

    Albow(来自python wiki)

    尽管这已经很旧了,但您真的不必为它设置gui库,只需使用精灵即可。对于标签,您可以使用精灵并为其提供要渲染的字体等。对于按钮,它继承标签并添加活动状态以检测更改并导致其他事件发生。滚动条的工作原理与按钮相同,只需更改标签或其他值即可

    另请参见以下内容的答案:


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

    我创建了一个函数,您可以在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
    
    然后继续输出


    这是通过获取矩形的坐标并将鼠标位置与矩形内部进行比较来实现的。如果鼠标位置位于矩形内部并单击了正确的按钮,则为真。希望这能有所帮助。

    我同意milleja46关于在某些事情上不使用gui的观点

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

    精致的菜单:


    简单的弹出窗口:

    这就是我试图避免的。我宁愿使用现有的库,比如pgu(它是LGPL许可的)并对其进行更新。它有40个源文件(不包括文档)和大约7000行Python代码。这也是可能的——我从来没有使用过pgu,所以我不知道它有多先进——但是如果它已经做了大量的初始工作,你有充分的理由继续并更新它。假设这7000条线路是好线路,无论如何;)是的,我想我可以这么做,假设StackOverflow没有向等式中添加任何神奇的数据。然而,pgu不仅仅是GUI。它还有(IIRC)3个不同的瓦片引擎和一些其他实用程序。所以不是所有这些行都是GUI。我不同意。我在这里提到了这个问题:其中一个答案表明,你可以轻松地将TKinter对象嵌入pygame界面。这是在屏幕上制作可点击图像的最简单方法,但如果你想让你的游戏有一个完整的选项菜单栏并类似于操作系统界面,那就太麻烦了。
    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