【wxPython】分割可変ウィンドウ
ウィンドウを分割しつつ、可変にするなら SplitterWindow を使う。
# -*- coding: utf-8 -*- import wxversion wxversion.select("3.0") import wx import wx.html2 import wx.stc as stc import markdown def update(event): timer.Start(milliseconds=100, oneShot=True) event.Skip() def update_preview(event): browser.SetPage(convert_by_str(text.GetValue()), "") event.Skip() def convert_by_str(str): codehilite = "codehilite(force_linenos=True, guess_lang=False, css_class=syntax)" html = markdown.markdown(str, ["extra", codehilite]) return html if __name__ == "__main__": app = wx.App() frame = wx.Frame(None, wx.ID_ANY, "Markdown test", size=(800, 600)) sw = wx.SplitterWindow(frame, -1, style=wx.SP_LIVE_UPDATE) pane1 = wx.Panel(sw, -1) text = stc.StyledTextCtrl(pane1, wx.ID_ANY) text.SetMarginType(1, stc.STC_MARGIN_NUMBER) text.SetMarginWidth(1, 30) text.StyleSetSpec(stc.STC_STYLE_LINENUMBER, "fore:#999999") text.Bind(wx.EVT_CHAR, update) pane1_sizer = wx.BoxSizer() pane1_sizer.Add(text, 1, wx.EXPAND, 10) pane1.SetSizer(pane1_sizer) pane2 = wx.Panel(sw, -1) browser = wx.html2.WebView.New(pane2) pane2_sizer = wx.BoxSizer() pane2_sizer.Add(browser, 1, wx.EXPAND, 10) pane2.SetSizer(pane2_sizer) sw.SetSashGravity(0.5) sw.SplitVertically(pane1, pane2) timer = wx.Timer(frame) frame.Bind(wx.EVT_TIMER, update_preview, timer) frame.Show() app.MainLoop()
分割した時の割合は、SetSashGravity
で定める。今回は 0.5 を指定しているので、初動は半々での表示となる。