Wxpython-multiple-document-interface

提供:Dev Guides
移動先:案内検索

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

典型的なGUIアプリケーションには複数のウィンドウがあります。 タブ付きウィジェットとスタック済みウィジェットを使用すると、そのようなウィンドウを一度に1つアクティブにできます。 ただし、多くの場合、このアプローチは他のウィンドウの表示が非表示になるため、役に立たない場合があります。

複数のウィンドウを同時に表示する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出力