Da ich mich zur Zeit mit ReST und wxPython befasse dachte ich mir, "man könnte doch beides verbinden" ...
Dabei ist folgendes entstanden:
Code: Alles auswählen
#!/usr/bin/env pythonw
# -*- coding: utf-8 -*-
import threading
import time
import wx
import wx.html
from docutils.core import publish_parts
class Rst2Html(threading.Thread):
def __init__(self, show, edit):
threading.Thread.__init__(self)
self.show = show
self.edit = edit
self.finish = threading.Event()
def run(self):
while not self.finish.isSet():
txt = self.edit.GetValue()
html = publish_parts(txt, writer_name="html")["html_body"]
self.show.SetPage(html)
time.sleep(1)
def stop(self):
self.finish.set()
class MainWindow(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="RST-Edit")
splitter = wx.SplitterWindow(self)
show_panel = wx.html.HtmlWindow(splitter)
edit_panel = wx.TextCtrl(splitter, style=wx.TE_MULTILINE)
font = wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL, False)
edit_panel.SetFont(font)
splitter.SplitHorizontally(show_panel, edit_panel)
thread = Rst2Html(show_panel, edit_panel)
thread.start()
class MyApp(wx.App):
def OnInit(self):
frame = MainWindow()
frame.Show(True)
self.SetTopWindow(frame)
return True
def main():
app = MyApp(filename="error.txt")
app.MainLoop()
if __name__ == "__main__":
main()
- Ich würde den Thread gern bei Programmende beenden, weiss aber (noch) nicht wie ...
- Während man im Editor-Teil was eintippt ist es durchaus wahrscheinlich, das es beim Konvertieren zu Fehlern kommt ... dabei kommt es zu einer Ausnahme, die den Konvertier-Thread abbricht ...
Man könnte zwar diese Ausnahme abfangen, aber ob das die einzige Lösung ist ? - Auch beim Source-Code bin ich mir nicht sicher, ob alles so ist, wie sein sollte ...