2012-01-03 2 views
0

異なるモジュール内のイベント方法:wxPythonを:私は(非常に非常に単純化された)を、このような二つのモジュールを持って

main.py:

from window import * 

class MyApp(wx.Frame): 

    def __init__(self, parent, label, pos, size): 
     wx.Frame.__init__(self, parent = parent, title = label, pos = pos, size = size) 
     self.Centre() 
     create_window(self) 
     self.Bind(wx.EVT_CLOSE, self.OnClose) 

    def OnClose(self, event): 
     self.dlg = wx.MessageDialog(self, 'Quit application', 
      'Please confirm', wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) 
     if self.dlg.ShowModal() == wx.ID_YES: 
      self.Destroy() 

if __name__ == '__main__': 
    app = wx.App() 
    frame = MyApp(None, 'MyApp', (0, 0), (740, 640)) 
    frame.Show() 
    frame.SetFocus() 
    app.MainLoop() 

window.py:今

import wx    

def create_window(self): 

    self.menubar = wx.MenuBar() 
    self.fileMenu = wx.Menu() 

    self.item = self.fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application') 

    self.Bind(wx.EVT_MENU, self.OnClose, self.item) 

    self.menubar.Append(self.fileMenu, '&File') 
    self.SetMenuBar(self.menubar) 

    self.statusbar = self.CreateStatusBar() 
    self.statusbar.SetStatusText('Ready') 

私はOnCloseメソッドをmain.pyからwindow.pyに移動したいのですが(main.pyの他の多くのメソッドがある場合はこれだけでなく、それらをすべて別のモジュールに移動してコードをより構造化したいと思っています)。 しかし、main.pyからモジュールを切り取り、それをwindow.pyに貼り付けるだけではうまくいきません。 私の質問では、イベントメソッドや別のメソッドを他のモジュールからアクセスできるようにするために、コード内で何を変更する必要がありますか?

+0

はcreate_windowクラス内のメソッドか、それは関数として表示されていますか? – joaquin

答えて

0

私はあなたが何を望んでいるのか分かりません。これがクラスで実装したい一般的な動作(特定の方法を閉じたり、状態を報告したり、ballonontipシステムを追加するなど)の場合は、対応するメソッドでクラスを作成し、クラスを継承します。

class BehaviorPack(object): 
    def __init__(self): 
     whatever 
    def OnClose(self, event) 
     whatever 
    def colour_panel(self): 
     whatever 

あなたはそのクラスをインポートし、それを継承:

class MyFrame(wx.Frame, BehaviorPack): 
    def __init__(self, *args, **kargs): 
     .......... 
0

あなたは常に(wxPythonの由来wxPythonを/の一部として含まれる1つがあります)PubSubのモデルを使用することができます。

リスナー(サブスクライバ)を1つのモジュールに設定してから、イベントが発生したコンテキストとともにイベント(パブリッシュ)を送信します。

これにより、簡単に分離できます。彼らはあなたが従っている特定のwxpythonの例を持っています:http://pubsub.sourceforge.net/

関連する問題