如何在继承wx.Frame的类之外的类中创建staticBitmap

时间:2012-07-19 00:15:36

标签: python class inheritance wxpython python-2.7

我的应用具有以下结构:

class GameWindow(wx.Frame):
    imageFile = r"C:\Users\Trufa\Desktop\pyll\img\ball.png"
    data = open(imageFile, "rb").read()
    stream = cStringIO.StringIO(data)
    bmp = wx.BitmapFromImage(wx.ImageFromStream(stream))
    image = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
    self.ball = wx.StaticBitmap(self, -1, image, (0, 0), (image.GetWidth(), image.GetHeight()))
    self.ball.Center()

if __name__ == '__main__':    
    app = wx.App()
    GameWindow(None, title='Pyll')
    app.MainLoop()

此简化版本按预期工作,创建球然后居中。

现在我尝试了各种各样的东西,但无法解决如何解决以下问题:我想在一个单独的类中创建球及其方法,如下所示:

class Ball:
    #Code to make the ball
    def move(self):
        self.ball.Center()

首先,这是一个很好的方法o我应该尝试留在GameWindow课程中,我想我会从将Ball概念抽象为一个课程中受益。

无论如何,如何做到这一点。我确信Ball课程必须继承某人,但我不确定是谁。

我尝试从GameWindowwx.Frame继承而没有任何好结果,但我不确定我是在做某些概念错误还是编程错了而且无法做到因为我在python中缺乏编程类和OO的知识。

总而言之,我想要这样的事情:

class Ball():#What should I inherit from?
    imageFile = r"C:\Users\Trufa\Desktop\pyll\img\ball.png"
    data = open(imageFile, "rb").read()
    stream = cStringIO.StringIO(data)
    bmp = wx.BitmapFromImage(wx.ImageFromStream(stream))
    image = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
    self.ball = wx.StaticBitmap(self, -1, image, (0, 0), (image.GetWidth(), image.GetHeight()))
    def move(self):
        self.ball.Center()

1 个答案:

答案 0 :(得分:1)

您真正需要做的就是子类wx.StaticBitmap。至少,这是我对你想做的事情的理解。这是一个简单的例子:

import wx

########################################################################
class Ball(wx.StaticBitmap):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent, imageFile):
        """Constructor"""
        wx.StaticBitmap.__init__(self, parent=parent)
        image = wx.Image(imageFile, wx.BITMAP_TYPE_ANY)
        self.SetBitmap(wx.BitmapFromImage(image))
        self.Center()


########################################################################
class GamePanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        sizer = wx.BoxSizer(wx.VERTICAL)
        self.ball = Ball(self, "ball.png")
        sizer.Add(self.ball, 0, wx.ALL|wx.CENTER, 5)
        self.SetSizer(sizer)

########################################################################
class GameWindow(wx.Frame):

    #----------------------------------------------------------------------
    def __init__(self, title):
        """"""
        wx.Frame.__init__(self, None, title=title, size=(400,400))
        panel = GamePanel(self)
        self.Show()


#----------------------------------------------------------------------
if __name__ == '__main__':    
    app = wx.App()
    GameWindow('Pyll')
    app.MainLoop()