2010-07-27 102 views
12

我正在制作一款需要能够在pygame表面弹出gui元素的游戏。 This问题不是我想要的,因为wxPython绕过SDL表面,而不是在它内部。到目前为止,我只在此问题空间中看到ocemppguGooeyPy我应该在Pygame中使用什么gui工具包?

  • Ocemp是巨大和crufty看。它提到了Python 2.3,我在cvs repo的快速浏览中发现的最新文件是2岁。
  • 我无法让GooeyPy工作(虽然我没有很努力;鸡蛋和Debian不是朋友),并且v0.2最后在2009年2月更新了。
  • 我一直在和pgu ,但它似乎没有维护(最后一次更新11/2009和原始维护者放弃它),并开始显示其年龄。它使用旧式的类并抛出字符串异常。

所以我对你的问题是这样的:我应该用什么gui工具包来制作漂亮的可点击按钮,在你的pygame应用程序中弹出?有积极的发展吗?

编辑,2011年9月

看起来PGU仍在维持。最后的提交是从4天前。

回答

2

我不知道有任何pygame的贵的东西,但它不应该是太难推出自己的(哎,也许将其开源!)

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

  1. 获取鼠标位置
  2. 鼠标悬停在任何按钮上(并且没有按钮被按下)?
  3. 显示悬停图像
  4. 鼠标悬停在按钮上,鼠标按钮被点击了吗?与该按钮相关的
  5. 火灾事件
  6. 见1

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

+0

这正是我想要避免的。我宁愿采用像pgu这样的现有库(它是LGPL许可的)并更新它。它有40个源文件(不包括文档)和大约7,000行Python代码。 – nmichaels 2010-07-27 13:02:13

+0

这也是可能的 - 我从来没有使用pgu,所以我不知道它有多高级 - 但如果它已经做了很多初始工作,你有充足的理由继续并更新它。假设这7,000行是好行,无论如何;) – 2010-07-27 13:28:43

+0

是的,我想我可能会这样做,假设StackOverflow不添加任何魔术数据的方程。 – nmichaels 2010-07-27 18:05:23

2

尽管这已经老了,你真的不必为它有一个GUI库,你只需使用精灵。对于标签,你可以使用一个精灵并给它渲染字体等等。对于按钮,它继承标签并添加活动状态以检测更改并导致发生其他事情。和滚动条的工作方式相同的按钮,只是更改标签或一些别人的价值

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。希望这可以帮助。

相关问题