[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] pygame in wxNotebook



Hi,
Im trying to put a pygame window as one of a tabs of a wxNotebook. I've attached my code but somehow the pygame window doesnt seem to attach itself. What am I doing wrong? or cant I do this/pygame doesnt allow it?
Im using wxpython 2.6.3.3 and pygame 1.7.1 on windows.
Thanks for any help
Astan

--
"Formulations of number theory: Complete, Consistent, Non-trivial. Choose two."



Animal Logic
http://www.animallogic.com

Please think of the environment before printing this email.

This email and any attachments may be confidential and/or privileged. If you are not the intended recipient of this email, you must not disclose or use the information contained in it. Please notify the sender immediately and delete this document if you have received it in error. We do not guarantee this email is error or virus free.

import wx
import os,sys
import thread
global pygame # when we import it, let's keep its proper name!

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:
            e = pygame.event.poll()
            if e.type == pygame.MOUSEBUTTONDOWN:
                self.color = (255,0,128)
                self.rect = (e.pos[0], e.pos[1], 100, 100)
                print e.pos
            self.screen.fill((0,0,0))
            self.screen.fill(self.color,self.rect)
            pygame.display.flip()
        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 # this has to happen after setting the environment variables.
        pygame.display.init()
        window = pygame.display.set_mode(tplSize)
        self.thread = SDLThread(window)
        self.thread.Start()

    def __del__(self):
        self.thread.Stop()

class mainWindow(wx.Frame):
    def __init__(self, parent, ID, strTitle, tplSize):
        wx.Frame.__init__(self, parent, ID, strTitle, size=tplSize)
        self.mainmenu = wx.MenuBar()   # Create menu bar.
        self.menu=wx.Menu()      
        
        self.exitID=wx.NewId()        
        self.menu.Append(self.exitID, 'E&xit', 'Exit program')        
        wx.EVT_MENU(self, self.exitID, self.OnExit)
        self.mainmenu.Append (self.menu, '&File')
        self.SetMenuBar (self.mainmenu)
        
        self.notebook = wx.Notebook(self,-1)

        self.tab1 = wx.Panel(self.notebook,-1)
        self.notebook.AddPage(self.tab1,"Add Notes1")
        
        self.tab2 = SDLPanel(self.notebook, -1, tplSize)
        self.notebook.AddPage(self.tab2,"Add Notes4")
        
        self.tab3 = wx.Panel(self.notebook,-1)
        self.notebook.AddPage(self.tab3,"Add Notes3")
        
        #self.Fit()

    def OnExit(self,event):
        self.Close()
        self.Destroy()
        sys.exit(0)

#######MAIN APP#######      
   
class App(wx.App):
    def OnInit(self):
        nextFrame = mainWindow(None,-1,"WX in pygame",(800,600))
        nextFrame.Show()
        self.SetTopWindow(nextFrame)
        return True

if __name__=="__main__":
    app=App(0)
    app.MainLoop()