0

私はPythonが初めてです。私は wxPython を使用してアプリケーションを作成しています。現在、ツールバーを生成するコードは次のようになっています。

class Window(wx.Frame)
def __init__(self, parent, plot):
    wx.Frame.__init__(self, parent, wx.ID_ANY, "Name", size =(900, 600))
    self.Centre()

    self.toolbar = self.CreateToolBar(style=(wx.TB_HORZ_LAYOUT | wx.TB_TEXT))
    self.toolbar.SetToolBitmapSize((32,32))
    self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/fileopen.png'))
    self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/filesave.png'))
    self.toolbar.AddSeparator()
    self.toolbar.Realize()

コードを少しクリーンアップしようとしていて、ツールバーに独自のクラスを持たせたいので、ツールバーを作成するときは、次のように呼び出します。

toolbar = Toolbar()

私の質問は、どうすればそのように動作するように書き直すことができますか? 現在、私のコードは次のようになっています。

class Toolbar():
    def __init__(self):
        self.toolbar = self.CreateToolBar(style=(wx.TB_HORZ_LAYOUT | wx.TB_TEXT))
        self.toolbar.SetToolBitmapSize((32,32))
        self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/fileopen.png'))
        self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/filesave.png'))
        self.toolbar.AddSeparator()
        self.toolbar.Realize()

「自己」がどのように機能するかはよくわかりません。init関数を書き直す必要がありますか? どうすれば修正できますか?どんな助けでも大歓迎です。ありがとう

4

2 に答える 2

3

ツールバーを設定するクラスの代わりに、関数を使用します。この関数は、wx.Frame をサブクラス化する Window のメンバー関数にすることができます。そうすれば、ツールバーは正しいウィンドウから作成され、期待どおりにアタッチされます。

上で書いているクラスは、ツールバーを接続する wx.Frame (Window という名前のクラス) を知っていれば機能します。それを機能させるには、フレーム オブジェクトをツールバー クリエーター クラスに渡す必要があります...

class Toolbar():
  def __init__(self, frame_to_connect_to):
    frame_to_connect_to.toolbar = frame_to_connect_to.CreateToolBar(style=(wx.TB_HORZ_LAYOUT | wx.TB_TEXT))
    frame_to_connect_to.toolbar.SetToolBitmapSize((32,32))
    frame_to_connect_to.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/fileopen.png'))
    frame_to_connect_to.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/filesave.png'))
    frame_to_connect_to.toolbar.AddSeparator()
    frame_to_connect_to.toolbar.Realize()

簡単な修正のように見えますが、実際にクラスを使用してこれを行うのは、クラスの適切な使用法ではありません。(それは間違っているとさえ言えます。)

実際には、ツールバーのものを独自のメンバー関数に移動するだけで、少しきれいになります。

class Window(wx.Frame)
  def __init__(self, parent, plot):
    wx.Frame.__init__(self, parent, wx.ID_ANY, "Name", size =(900, 600))
    self.Centre()
    self._init_toolbar()

  def _init_toolbar(self):
    self.toolbar = self.CreateToolBar(style=(wx.TB_HORZ_LAYOUT | wx.TB_TEXT))
    self.toolbar.SetToolBitmapSize((32,32))
    self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/fileopen.png'))
    self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/filesave.png'))
    self.toolbar.AddSeparator()
    self.toolbar.Realize()

すべてのメリットを享受できます。

于 2009-02-27T19:52:14.657 に答える