2017-11-01 2 views
0

私はpython2.7 + wxpythonを使用していくつかのチャートデータを表示しています。wx.frameを使用したPythonクラスの継承

私は2つのクラスを持ち、1つ(wxクラス)はwx.frameで管理し、もう1つ(テキストデコードクラス)はファイルコンテキストからのパーサー用です。 wx.frame(例えば:self.SetMenuBar、self.SetTitle)をwxクラスで制御するためにself。*を使うことができます。この "self"を別のクラスに渡して同じwx.frameを制御できますか?私が直接、別のクラスでself.SetTitleを使用している場合などは簡単なコードをたどる

class CanvasFrame(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, -1, title, size=(550, 350)) 
     self.SetBackgroundColour(wxc.NamedColour("WHITE")) 
     .... 
     normal_test_mode_decode(filename, directory) 
     .... 

class normal_test_mode_decode(CanvasFrame): 
    def __init(self, csv_fname, csv_dir): 
     .... 
     self.SetTitle(os.path.join(csv_dir, csv_fname)) #Error here 

class MyApp(wx.App): 
    def OnInit(self): 
     frame = CanvasFrame(None, "wxPython mathtext demo app") 
     .... 

if __name__ == '__main__': 
    app = MyApp() 
    app.MainLoop() 

これはエラーメッセージです。

Traceback (most recent call last): 
    File "D:\normal_test_mode_parser\normal_test_mode_parser.py", line 45, in OnOpen 
    self.decode = normal_test_mode_decode(filename, directory) 
    File "D:\normal_test_mode_parser\normal_test_mode_parser.py", line 64, in __init__ 
    self.SetTitle(os.path.join(csv_dir, csv_fname)) 
    File "C:\Python27\lib\site-packages\wx-3.0-msw\wx\_windows.py", line 455, in SetTitle 
    return _windows_.TopLevelWindow_SetTitle(*args, **kwargs) 
TypeError: in method 'TopLevelWindow_SetTitle', expected argument 1 of type 'wxTopLevelWindow *' 

私の計画は、GUIの機能と別のクラス(normal_test_mode_decode)データ分析機能を処理を管理するためのwxPythonのためのそのクラス(CanvasFrame)であるので、私はこの問題を修正します。

ありがとうございました!

あなたが必要とする場合は、この私のソースが問題に見る: https://paste.ofcode.org/SCiFLfYcB52rtrmEyn6QuC

このコードを実行すると、ファイルを選択してください - > [すべてのファイルを開いて、その後、あなたがエラーを参照してください。

+0

お願いします。1.コードを(リンクではなく)ご質問の中に掲載してください。 2.あなたの質問の中でテキストとしてエラーメッセージなどを**投稿してください(リンクではありません)。 –

+0

ビル、ありがとう。私は自分の質問を修正したが、埋め込み画像には十分な評判がない。 –

+0

私は理解しています。あなたがする必要があるのは、paste.ofcode.orgや端末画面のようなソースからテキストをコピーしてSOの質問に貼り付ける方法を見つけることです。 Windowsを使用しているので、pythonアイコンのc:\ python27 \ python.exeという画面の左上隅を右クリックすると、切り取りと貼り付けを可能にするオプションのメニューが表示されます。ソースコードをコピーするには、コードを強調表示し、コピー&ペーストを使用します。 –

答えて

0

私はコードを少し簡略化したり、バグを取り除いてhttps://paste.ofcode.org/yfcjE5uBvrf2VPzb3NEvt7に貼り付けました。

  • あなたがPY3を使用しているので、私はsuper()superを含むより複雑な式を置き換え、これが発生するミスが少なくなります。
  • super().__init__(parent, id=-1, title='something something', size=(550, 350))にリテラルタイトルを追加しました。これはおそらく最終的には望んでいないが、開発作業を進めることを可能にする。
  • lineが定義されていないため、self.content =に近い行がself.content = self.fp.readline().strip().split(',')に変更されました。繰り返しますが、おそらくもっと注意を払うことになります。
+0

Billありがとう、私はタイトルのパスを表示したいが、そうではない。 CanvasFrameで作成されたwx.frameではなく、normal_test_mode_decode(CanvasFrame)でsuper().__ init __(parent、-1)を呼び出すと、wx.frameが再作成されますか? –

+0

'__init__'は' __init__'が呼び出された時点で既にオブジェクトが存在するため、オブジェクトを再作成しません。'__init__'は単にオブジェクト内にプロパティを設定または作成します。あなたがしたいことをするには 'self.detode = normal_test_mode_decode(self、filename、directory)'の行の後に 'self.SetTitle(filename)'を入れます。 (あなたはおそらく何か何かを変えたいと思うでしょう。) –

+0

これがあなたの質問に答えるなら、それを受け入れてください。 –

関連する問題