2012-01-10 208 views
5

我正在尋找一種可以將wxPython GUI元素添加到pygame中的方法。如果有另一種方法可以解決添加GUI元素到pygame的目的,請提出建議。我在安裝PGU時遇到問題。感謝您的幫助。在pygame中添加wxpython

+0

它驚訝地知道python無法添加按鈕,在Java中它是非常簡單的。請證明我錯了! – hershey92 2012-01-10 03:03:49

+0

http://stackoverflow.com/questions/8794506/adding-wxpython-gui-elements-in-a-pygame-physics-simulation的副本。請繼續更新您的原始問題,詳細瞭解您遇到的問題。 – 2012-01-10 17:14:04

+0

這是可能的,因爲我以前做過。雖然我希望它更加兼容。 wxPython比任何pygame GUI庫都好得多。 PGU很糟糕!甚至不打擾下載它。它在你將pygame放入wxpython時可以做什麼是非常有限的,儘管GUI很明智,但它看起來不錯。 – thelost 2012-01-26 20:37:06

回答

3

沒有;你可以添加wxWidgets到PyGame。添加打開/保存對話框,按鈕等操作很簡單。有時,當您嘗試共享區域時(如上所述,存在衝突的窗口系統),它會變得很討厭,但它絕對是可行的。

我以前寫過幾年,所以很雜亂;但至少很簡單。它應該幫助你開始:

class SDLThread: 
    def __init__(self,screen): 
     self.m_bKeepGoing = self.m_bRunning = False 
     self.screen = screen 
     self.color = (255,0,0) 
     self.rect = (10,10,100,100) 
    def Start(self): 
     self.m_bKeepGoing = self.m_bRunning = True 
     thread.start_new_thread(self.Run,()) 
    def Stop(self): 
     self.m_bKeepGoing = False 
    def IsRunning(self): 
     return self.m_bRunning 
    def Run(self): 
     while self.m_bKeepGoing: 
      pass 
##   GetInput() 
##   Draw() 
     self.m_bRunning = False; 
class SDLPanel(wx.Panel): 
    def __init__(self,parent,ID,tplSize): 
     global pygame 
     wx.Panel.__init__(self, parent, ID, size=tplSize) 
     self.Fit() 
     os.environ['SDL_WINDOWID'] = str(self.GetHandle()) 
     os.environ['SDL_VIDEODRIVER'] = 'windib' 
     import pygame 
     pygame.init() 
     icon = pygame.Surface((1,1));icon.set_alpha(0);pygame.display.set_icon(icon) 
     global Surface 
     Surface = pygame.display.set_mode(tplSize) 
     self.thread = SDLThread(Surface) 
     self.thread.Start() 
    def __del__(self): 
     self.thread.Stop() 
+0

謝謝,這給了我很多想法:) – hershey92 2012-07-01 13:22:57

0

我不認爲它的可能,因爲wxPython(使用wxWidgets C++)是一個窗口管理系統的包裝,它依靠OS功能在屏幕上繪製(它根據OS轉換爲正確的系統調用)。

Pygame使用SDL和一個簡單的代碼來管理窗口系統,它只需調用一些操作系統函數來創建窗口並將其提供給SDL,就像畫布一樣。

一種方法是:使用ctypes的,以使C調用到OS庫文件來繪製系統原生窗口部件,不使用任何pygame的功能,這樣

其他方式(醜陋的,如果作品不能肯定):

  • 我不知道怎麼樣,但是找到一種方法,部件轉換爲圖像緩衝區對象,並使用它像面(純位圖)。

我認爲你應該做的:

  • 使用pygame的,使用面和鼠標/鍵盤事件,以控制或下載一些預製的構建自己的GUI。

  • 堅持使用wx,你可以在系統原生主題上輕鬆地構建你的GUI,也可以使用DC(繪製上下文)來繪製像pygame,也許(不確定)包含pygame上下文到wx作爲一個小部件。 你可以從wx擁有自己的事件處理程序中受益。

我希望它能以某種方式幫助你。