Добавление wxpython в Pygame - PullRequest
       29

Добавление wxpython в Pygame

5 голосов
/ 10 января 2012

Я ищу способ, которым элементы графического интерфейса wxPython могут быть добавлены в pygame. Если есть альтернатива для решения задачи добавления элементов GUI в pygame, пожалуйста, предложите это. У меня проблема с установкой PGU. Спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Нету; Вы можете добавить 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 голосов
/ 25 февраля 2012

Я не думаю, что это возможно, поскольку wxPython (использующий wxWidgets c ++) является оберткой для системы управления окнами, он полагается на функции ОС для рисования на экране (он преобразуется в нужные системные вызовы в зависимости от ОС).

Pygame использует SDL и простой код для управления окнами, он вызывает несколько функций ОС только для того, чтобы создать окно и передать его SDL для рисования на нем, как на холсте.

Один из способов:

  • использование ctypes для выполнения вызовов C в файлах библиотеки ОС для рисования системных виджетов, поэтому вы не используете функции pygame.

Другой способ (некрасиво и не уверен, что работает):

  • Я не знаю как, но я нашел способ конвертировать виджеты в объекты буфера изображения и использовать его как поверхности (простые растровые изображения).

Что я думаю, вы должны сделать:

  • Используйте pygame, создайте свой собственный графический интерфейс с использованием поверхностей и событий мыши / клавиатуры для управления им или загрузите некоторые готовые.

  • Придерживайтесь wx, вы можете легко построить свой графический интерфейс на системной родной теме, также вы можете использовать DC (рисовать контексты) для рисования как pygame и, возможно (не уверен), включить контекст pygame в wx как один виджет. У wx есть собственный обработчик событий.

Надеюсь, это вам как-то поможет.

...