1

我的应用程序具有以下结构:

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()

首先,这是一个很好的方法,如果我尝试留在GameWindow课堂上,我认为我会从将Ball概念抽象为一个类中受益。

无论如何,这怎么能做到。我确定 Ball 类必须从某人那里继承,但我不确定从谁那里继承。

我尝试继承GameWindow和继承wx.Frame,但没有任何好的结果,但我不确定我是否在概念上做错了,或者编程错了,并且由于我缺乏对编程类和 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()
4

1 回答 1

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()
于 2012-07-19T13:36:08.633 回答