【wxPython】Markdown をライブプレビュー
Markdown パッケージを次を参考にインストール
Installation — Python Markdown
# -*- coding: utf-8 -*- import wxversion wxversion.select("3.0") import wx import wx.html2 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") sizer = wx.BoxSizer(wx.HORIZONTAL) text = wx.TextCtrl(frame, -1, "", style=wx.TE_MULTILINE) text.Bind(wx.EVT_CHAR, update) browser = wx.html2.WebView.New(frame) sizer.Add(text, 1, wx.EXPAND, 10) sizer.Add(browser, 1, wx.EXPAND, 10) frame.SetSizer(sizer) frame.SetSize((640, 480)) timer = wx.Timer(frame) frame.Bind(wx.EVT_TIMER, update_preview, timer) frame.Show() app.MainLoop()
WebView を使うので wxPython のバージョンを 3 に指定。
EVT_CHAR (入力)時に即プレビューしたいところだが、最後に入力した内容が反映されない。
EVT_TIMER で少し間を空けてから反映しているところがミソ。
追記: 2014/11/19 20:19
ミソと書いておきながら、EVT_CHAR とか EVT_TIMER なんて使う必要なかった件
【wxPython】TextCtrl と StyledTextCtrl の change イベントの違い - 2noの日記
左側のテキストエリアに入力すると、右側にリアルタイム反映する。