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ずに継承を試みましたが、概念が間違っていたのか、プログラミングが間違っていたのかはわかりませんが、プログラミングクラスや一般的なオブジェクト指向に関する知識が不足しているため、それを行うことができませんでしたパイソンで。

要約すると、私は次のようなものが欲しいです:

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 に答える