MDIFrameの挙動がWindowsとLinuxで異なる
MDIというのは、90年代の始めにMicrosoftが考案したものなのだな。Excelなんかがすぐに思い浮かぶが、一つのフレーム(親フレーム)の中にたくさんのフレーム(子フレーム)を表示する方法だ。
wxPythonでも実装できるのだが、Windowsネイティブのwidgetsを使っているらしく、Linuxでは使えないらしい。たぶんMacOSでもダメかな。
なので、同じコードをWindowsとLinuxで動かしたとき、別々の挙動となる。下記、サンプルコード。
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, "E&xit") 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) if __name__ == '__main__': app = wx.PySimpleApp() frame = MDIFrame() frame.Show() app.MainLoop()
このコードをWindowsで実行すると、MDI windowとなる。新しいウィンドウを追加すると子ウィンドウが増えていく(下図)。
一方で、同じコードをLinuxで実行すると、新しいウィンドウを追加するとタブが増えていく(下図)。