2012-01-10 35 views
5

Szukam sposobu, w którym elementy GUI wxPython mogą być dodawane do pygame. Jeśli istnieje alternatywa, aby rozwiązać problem dodawania elementów GUI do pygame, należy to zasugerować. Mam problem z instalacją PGU. Dziękuję za pomoc.Dodawanie wxpython w pygame

+0

zaskakujące, że Python nie ma możliwości dodania przycisku, w Javie było bardzo proste. Proszę, udowodnij, że jestem zła !! – hershey92

+0

Duplikat http://stackoverflow.com/questions/8794506/adding-wxpython-gui-elements-in-a-pygame-physics-simulation. Kontynuuj aktualizację pierwotnego pytania, podając więcej szczegółów na temat występujących problemów. –

+0

jest to możliwe, tak jak wcześniej to zrobiłem. Chociaż chciałbym, żeby był bardziej kompatybilny. wxPython jest znacznie lepszy niż jakakolwiek biblioteka GUI pygame. PGU ssie wielki czas !!! Nawet nie próbuj go ściągać. Jest bardzo ograniczony do tego, co możesz zrobić, gdy umieścisz pygame w wxpythonie, chociaż GUI jest mądre, wygląda na przyzwoite. – thelost

Odpowiedz

3

Nie; MOŻESZ dodać wxWidgets do PyGame. Dodanie/zapisanie okien dialogowych, przycisków itp. Jest trywialne. Czasami robi się paskudny, kiedy próbuje się dzielić obszarami (jak wyżej, są to sprzeczne systemy okien), ale jest to zdecydowanie wykonalne.

Napisałem kilka lat temu, więc jest brudny; ale przynajmniej jest to proste. To powinno pomóc Ci zacząć:

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

dzięki temu dało mi to wiele pomysłów :) – hershey92

0

nie sądzę jego możliwe, ponieważ wxPython (przy użyciu wxWidgets C++) jest nakładką na system zarządzania okno, to polegać na funkcji systemu operacyjnego do rysowania na ekranie (konwertować do odpowiedniego systemu połączeń w zależności od systemu operacyjnego).

Pygame używa SDL i prostego kodu do systemu zarządzania oknami, wywołuje kilka funkcji systemu operacyjnego tylko po to, aby stworzyć okno i przekazać je SDL, aby go narysować, jak płótno.

Jednym ze sposobów jest:

  • użyciu ctypes dokonać C wzywa do plików bibliotecznych OS zwrócić rodzimym systemem widgety, w ten sposób, że nie są używane żadne funkcje Pygame.

Inny sposób (brzydkie i nie wiem, czy robót):

  • Nie wiem jak, ale znalezienie sposobu na konwersję widgetów do obiektów graficznych buforowych i używać go jak zwykły powierzchnie (bitmap).

Co myślę, że należy zrobić:

  • Użyj pygame, zbudować własny GUI z wykorzystaniem powierzchni i wydarzenia mysz/klawiatura ją kontrolować lub pobrać jakiś pre-made.

  • Trzymaj z wx, możesz łatwo zbudować GUI na natywnym systemie, możesz również użyć DC (rysuj konteksty), aby narysować jak pygame, i być może (nie wiesz) zawrzeć kontekst pygame do wx jako jeden widget. Możesz skorzystać z wx posiadającego własny program obsługi zdarzeń.

Mam nadzieję, że w jakiś sposób ci to pomoże.