在 wxPython 和 Kivi 中呈现短文本项的最佳工具

best tool for rendering short items of text in wxPython and Kivi

我在桌面 (wxPython) 和移动 (kivy) 上有一个 multi-platform 应用程序 运行。在其中,我想在应用程序的 window 中呈现小区域的可变文本。文本将取决于应用程序的状态。我很乐意使用 rtf、html 或 reStructuredText。我需要在每个平台上为文本使用相同的来源。

文本片段的典型示例是:

Heading
=======

1. With 24 widgets pull a **long** one;
2. with fewer, push a **wide** one.

这将呈现为:


标题

  1. 有 24 个小部件拉一个 一个;
  2. 用的少,推一个一个。

我的问题是:我应该使用哪种格式?

我的偏好是 reStructuredText。似乎有一个 kivy widget 来支持这个,但在 wxPython

中没有

一种解决方案是使用 docutils 包。

这将采用 reStructuredText 并将其输出为 html。然后我可以使用 wxPython wx.html 控件来显示输出。

import wx
import wx.html as wxhtml
from docutils.core import publish_string



class MainFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.panel = MainPanel(self)
        sizer = wx.BoxSizer()
        sizer.Add(self.panel)
        self.SetSizerAndFit(sizer)
        self.Show()

        input_string = ("Heading\n"
                        "=======\n"
                        "\n"
                        "1. With 24 widgets pull a **long** one;\n"
                        "2. with fewer, push a **wide** one.\n")
        self.display_rst(input_string)

    def display_rst(self, rst):
        html = publish_string(rst, writer_name='html')
        self.panel.html.SetPage(html)

class MainPanel(wx.Panel):
    def __init__(self, parent, *args, **kwargs):
        wx.Panel.__init__(self, parent, *args, **kwargs)
        display_style = wx.VSCROLL|wx.HSCROLL|wx.TE_READONLY|wx.BORDER_SIMPLE
        self.html = wxhtml.HtmlWindow(self, -1, size=(300, 200),
                                    style=display_style)
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(self.html)
        self.SetSizer(sizer)

if __name__ == "__main__":
    SCREEN_APP = wx.App()
    MAIN_FRAME = MainFrame(None, title="Display HTML")
    SCREEN_APP.MainLoop()