1

いくつかのプラグインを定義したいと思います。それらはすべてスーパークラスプラグインから継承します。

各プラグインは、「draw」と呼ばれるより具体的なメソッドを持つwx.Panelで構成されています。

クラスをPanelとして定義し、後でそのクラスをフレームで呼び出すにはどうすればよいですか?

私はこのように試しました:

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel(self, parent)

しかし、それは私にこのエラーを与えます:

in __init__
    _windows_.Panel_swiginit(self,_windows_.new_Panel(*args, **kwargs))
TypeError: in method 'new_Panel', expected argument 1 of type 'wxWindow *'

前もって感謝します!

4

3 に答える 3

5
class MyPanel(wx.Panel):
    def __init__(self, *args):
        wx.Panel.__init__(self, *args)

    def draw(self):
        # Your code here
于 2010-02-16T13:38:07.990 に答える
2

wx.PyPanelPythonからサブクラス化することを目的としたPanelのバージョンであり、C++仮想メソッドをオーバーライドできるクラスがあります。

他の多くのwxクラスのPyXxxxバージョンもあります。

于 2010-02-16T13:26:00.743 に答える
0

クラスをPanelとして定義し、後でそのクラスをフレームで呼び出すにはどうすればよいですか?

あなたが試したことは近いですが、あなたはスーパークラスを適切に呼び出していません__init__。ただし、wxPythonクラスをサブクラス化する場合は、通常、次のパターンを使用することをお勧めします。これにより、渡す特定の引数について心配する必要がなくなります。(これでは、問題のコードの範囲外であった問題は解決されませんでしたが、何が起こっているのかが明確になる可能性があります。)

class Panel(wx.Panel):
    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        # ... code specific to your subclass goes here

これにより、渡されたものはすべて、追加や削除なしでスーパークラスメソッドに渡されます。つまり、サブクラスのシグニチャはスーパークラスのシグニチャと完全に一致します。これは、サブクラスを使用している他の誰かがおそらく期待するものでもあります。

__init__()ただし、スーパークラスを呼び出す以外に自分のメソッドで実際に何もして__init__()いない場合は、メソッドを提供する必要はまったくありません。

あなたの元の問題に関して:

しかし、それは私にこのエラーを与えます:__init__ windows.Panel_swiginit(self,windows.new_Panel(*args, **kwargs)) TypeError: in method 'new_Panel', expected argument 1 of type 'wxWindow *'

編集済み)ハビエル(およびブライアン・オークリー、私を訂正)が指摘したように、あなたは実際に__init__はスーパークラスを呼び出すのではなく、内部でwx.Panel()をインスタンス化していました。__init__(Javierによる「親」引数の「* args」への変更は私を混乱させました...混乱させて申し訳ありません。)

于 2010-02-16T14:44:13.180 に答える