2010-07-27 101 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。希望這可以幫助。

相關問題