2017-10-21 8 views
0

rtfコントロールを使用してテキストを表示しています。 rtfコントロールのオブジェクト構造を理解できません。テキストをrtfバッファにどのように取得しますか?wxPythonリッチテキストコントロールの使用

私はバッファにアクセスし、xmlハンドラを追加しました。どこから行くのですか?私はここで私が

def refresh_rtf(self, xml): 
    if xml != '': 
     out = StringIO() 
     handler = wx.richtext.RichTextXMLHandler() 
     rtf_buffer = self.rtf_control.GetBuffer() 
     rtf_buffer.AddHandler(handler) 
     out.write(str(xml)) 
     out.seek(0) 
     handler.LoadStream(rtf_buffer, out) 
     self.rtf_control.Refresh() 

Loremのイプサムの嘆きはAMET座るたい結果を達成Pythonの2のコードを追加した参考

import wx 
import wx.richtext as rt 


class MainFrame(wx.Frame): 
    """Create MainFrame class.""" 
    def __init__(self): 
     """Initialise the class.""" 
     wx.Frame.__init__(self, None, -1, 'Demonstrate wxPython Rich Text') 
     self.panel = MainPanel(self) 
     self.refresh_rtf(self.raw_xml()) 
     self.Centre() 

    def refresh_rtf(self, xml): 
     handler = wx.richtext.RichTextXMLHandler() 
     rtf_buffer = self.rtf_control.GetBuffer() 
     rtf_buffer.AddHandler(handler) 

     #handler.ImportXML(rtf_buffer, self.rtf_control) 
     #self.rtf_control.Refresh() 

    def raw_xml(self): 
     xml = ('<?xml version="1.0" encoding="UTF-8"?>' 
      '<richtext version="1.0.0.0" xmlns="http://www.wxwidgets.org">' 
      '<paragraphlayout textcolor="#4C4C4C" fontsize="11"' 
          'fontstyle="90"' 
          'fontweight="90" fontunderlined="0"' 
          'fontface="Ubuntu" alignment="1"' 
          'parspacingafter="10" parspacingbefore="0"' 
          'linespacing="10">' 
       '<paragraph>' 
        '<text>"What do we want: "</text>' 
        '<text textcolor="#FF0000">all</text>' 
       '</paragraph>' 
      '</paragraphlayout>' 
     '</richtext>') 
     return xml 


class MainPanel(wx.Panel): 
    """Create a panel class to contain screen widgets.""" 
    def __init__(self, frame): 
     """Initialise the class.""" 
     wx.Panel.__init__(self, frame) 
     rtf_sizer = self._create_rtf_control(frame) 
     main_sizer = wx.BoxSizer(wx.HORIZONTAL) 
     main_sizer.Add(rtf_sizer, flag=wx.ALL, border=10) 
     self.SetSizerAndFit(main_sizer) 

    def _create_rtf_control(self, frame): 
     rtf_style = wx.VSCROLL|wx.HSCROLL|wx.TE_READONLY|wx.BORDER_SIMPLE 
     frame.rtf_control = wx.richtext.RichTextCtrl(self, 
               size=(400, 200), 
               style=rtf_style) 
     sizer = wx.BoxSizer(wx.HORIZONTAL) 
     sizer.Add(frame.rtf_control) 
     return sizer 


if __name__ == '__main__': 
    """Run the application.""" 
    screen_app = wx.App() 
    main_frame = MainFrame() 
    main_frame.Show(True) 
    screen_app.MainLoop() 

***** ***** EDIT

、consectetur adipiscing elit。整数の必要性。 Praesent libero。 Sed cursus ante dapibus diam。 Sed nisi。 Nullaは、Nibh elementum imperdietでsemを使用します。 Duis sagittis ipsum。

答えて

0

私はこれを悪い仕事として与えています。私はそれが可能だと確信しているが、誰がある

は、代わりに私は、完全に機能

html.HtmlWindow 

改訂版のコードを使用して機能を実装している私を導くことができるように思わない:

import wx 
import wx.html as html 


class MainFrame(wx.Frame): 
    """Create MainFrame class.""" 
    def __init__(self): 
     """Initialise the class.""" 
     wx.Frame.__init__(self, None, -1, 'Demonstrate wxPython Html') 
     self.panel = MainPanel(self) 
     self.Centre() 
     self.html_display.SetPage(self.raw_html()) 

    @staticmethod 
    def raw_html(): 
     html = ('<p><font color="#4C4C4C", size=2>What do we want: ' 
        '<font color="#FF0000">all</font>' 
       '</p>') 
     return html 


class MainPanel(wx.Panel): 
    """Create a panel class to contain screen widgets.""" 
    def __init__(self, frame): 
     """Initialise the class.""" 
     wx.Panel.__init__(self, frame) 
     html_sizer = self._create_html_control(frame) 
     main_sizer = wx.BoxSizer(wx.HORIZONTAL) 
     main_sizer.Add(html_sizer, flag=wx.ALL, border=10) 
     self.SetSizerAndFit(main_sizer) 

    def _create_html_control(self, frame): 
     txt_style = wx.VSCROLL|wx.HSCROLL|wx.BORDER_SIMPLE 
     frame.html_display = html.HtmlWindow(self, -1, 
               size=(400, 200), 
               style=txt_style) 
     sizer = wx.BoxSizer(wx.HORIZONTAL) 
     sizer.Add(frame.html_display) 
     return sizer 


if __name__ == '__main__': 
    """Run the application.""" 
    screen_app = wx.App() 
    main_frame = MainFrame() 
    main_frame.Show(True) 
    screen_app.MainLoop() 

生データを変換する作業は多すぎますが、それほど多くはありません

関連する問題