我应该使用哪个GUI工具包与Pygame一起使用?

12
我正在制作一个需要在pygame表面内弹出gui元素的游戏。 这个问题并不是我想要的,因为wxPython绕过了SDL表面,而不是在其中。到目前为止,在这个问题空间中,我只看到ocemp, pguGooeyPy

  • Ocemp非常庞大,看起来有点老旧。它提到了Python 2.3,我在快速浏览cvs repo时找到的最新文件是两年前的。
  • 我无法让GooeyPy工作(虽然我没有尝试很努力;eggs和Debian不是朋友),v0.2最后更新于2009年2月。
  • 我一直在使用pgu,但它似乎没有维护(上次更新时间为11/2009,原始维护者已经放弃了),并且开始显得有些陈旧。它使用旧式类并抛出字符串异常。

所以我的问题是:在pygame应用程序中制作漂亮的可点击按钮,我应该使用哪个GUI工具包?有任何正在积极开发的吗?

编辑,2011年9月

看起来PGU仍在维护中。最近的提交是4天前。

6个回答

2
我不知道有任何pygame gui的东西,但是自己编写应该不会太难(也许还可以开源!)。
如果你只需要几个简单的按钮,你可以使用GIMP或Photoshop或其他软件制作两个(或三个)图片 - 一个正常状态的按钮,一个按下状态的按钮和一个悬停状态的按钮,然后编写自己的事件循环/处理程序,做如下操作:
1. 获取鼠标位置。 2. 鼠标是否在任何按钮上方(没有按钮被按下)? 3. 显示悬停图像。 4. 鼠标是否在按钮上并且点击了鼠标按钮? 5. 触发与该按钮相关联的事件。 6. 回到步骤1。
这有点简化了,但至少可以给你一个起点(如果没有其他pygame GUI库的话)。

这就是我试图避免的。我宁愿使用像pgu这样已存在的库(它是LGPL许可证),然后更新它。它有40个源文件(不包括文档),大约7000行Python代码。 - nmichaels
这也是可能的 - 我从未使用过pgu,所以不知道它有多先进 - 但是如果它已经完成了大部分的初始工作,那么你完全有理由继续更新它。无论如何,假设这7,000行都是好代码;) - Wayne Werner
是的,我正在考虑这么做,假设StackOverflow没有向等式中添加任何神奇数据。 - nmichaels
然而,pgu不仅仅是GUI。它还有(如果我没记错的话)3个不同的瓦片引擎和一些其他实用工具。因此,并非所有这些行都是GUI。 - PrettyPrincessKitty FS

2

虽然这个技术有些老旧,但你并不需要使用 GUI 库,只需使用精灵即可。对于标签,你可以使用精灵并指定字体进行渲染等操作。对于按钮,它会继承标签的功能,并添加一个活动状态来检测更改并引起其他操作。滚动条的工作方式与按钮相同,只是更改标签或其他值。


我不同意。我从这里被引用到了这个SO问题:https://dev59.com/9l3Va4cB1Zd3GeqPC7Bn#8291303,在那里的一个答案展示了你可以轻松地将TKinter对象嵌入到pygame界面中。 - Marc Maxmeister


1

0
我创建了一个函数,你可以在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。希望这可以帮助到您。


这是在屏幕上制作可点击图像的最简单方法,但如果您希望游戏拥有完整的菜单栏选项并类似于操作系统界面,则会变得繁琐。 - Marc Maxmeister

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接