フォーラム | 最新のWeb開発のチュートリアル
 

wxPython複数ドキュメントインタフェース


典型的なGUIアプリケーションは、複数のウィンドウを持つことができます。 タブ付き積層ウィジェットは、一度に1つの、このようなウィンドウをアクティブにすることができます。 他のウィンドウのビューが隠されているようしかし、何度もこのアプローチは有用ではないかもしれません。

同時に複数のウィンドウを表示するための一つの方法は、独立したウィンドウとしてそれらを作成することです。 これは、SDIと呼ばれている( Single Document Interface ) 各ウィンドウは、など、独自のメニューシステム、ツールバーを有していてもよいので、これはより多くのメモリリソースを必要とし

wxPythonの中MDIフレームワークはwx.MDIParentFrameクラスを提供します。 その目的は、複数の子ウィンドウのコンテナ、各wx.MDIChildFrameクラスのオブジェクトとして機能します。

子ウィンドウは、親フレームのMDIClientWindow領域に存在します。 すぐに子フレームが追加されると、親フレームのメニューバーには、カスケード接続やタイル状の子供たちを配置するボタンを含むウィンドウメニューを示しています。


次の例では、トップレベルウィンドウとしてMDIParentFrameの使用を示します。 メソッドによりNewWindowと呼ばれるメニューボタンは、クライアント領域内の子ウィンドウを追加します。 複数のウィンドウを添加し、その後、カスケード接続やタイル張りの順で配置することができます。

次のように完全なコードがあります -

import wx 
 
class MDIFrame(wx.MDIParentFrame): 
   def __init__(self): 
      wx.MDIParentFrame.__init__(self, None, -1, "MDI Parent", size = (600,400)) 
      menu = wx.Menu() 
      menu.Append(5000, "&New Window") 
      menu.Append(5001, "&Exit") 
      menubar = wx.MenuBar() 
      menubar.Append(menu, "&File") 
		
      self.SetMenuBar(menubar) 
      self.Bind(wx.EVT_MENU, self.OnNewWindow, id = 5000) 
      self.Bind(wx.EVT_MENU, self.OnExit, id = 5001) 
		
   def OnExit(self, evt): 
      self.Close(True)  
		
   def OnNewWindow(self, evt): 
      win = wx.MDIChildFrame(self, -1, "Child Window")
      win.Show(True) 
		
app = wx.App() 
frame = MDIFrame() 
frame.Show() 
app.MainLoop()

上記のコードは、次の出力を生成します -

MDI出力