【问题标题】:tkinter text widget as htmltkinter 文本小部件作为 html
【发布时间】:2019-03-25 15:26:53
【问题描述】:

我已经构建了用于发送电子邮件的 tkinter 应用程序。电子邮件的正文应该从文本小部件中获取带有格式/样式的文本。有什么方法可以做到这一点。

get 方法只给出文本,而不给出样式/格式。

【问题讨论】:

    标签: tkinter text widget sendmail tkinter-text


    【解决方案1】:

    文本小部件有一个名为dump 的方法,它可以序列化文本小部件中的所有内容。它返回一个元组列表。每个元组的形式为(键、值、索引)。 key 将是以下之一:textmarktagontagoffimagewindow。该值将取决于键。例如,tagontagoff 的值将是标签的名称。对于text,它是文本。

    考虑一个文本小部件,其标签“b”表示粗体,“h1”表示标题。它可能看起来像这样:

    当您调用dump 方法(例如:self.text.dump("1.0", "end"))时,您会得到如下内容:

    (
        ('mark', 'current', '1.0'),
        ('tagon', 'h1', '1.0'),
        ('text', 'Hello, world!', '1.0'),
        ('tagoff', 'h1', '1.13'),
        ('text', '\n', '1.13'),
        ('text', '\n', '2.0'),
        ('text', 'this is a test with some ', '3.0'),
        ('tagon', 'b', '3.25'),
        ('text', 'bold text', '3.25'),
        ('tagoff', 'b', '3.34'),
        ('text', '.', '3.34'),
        ('mark', 'insert', '3.35'),
        ('text', '\n', '3.35'),
    )
    

    转换程序只需遍历该数据并处理每个键。如果您使用与 html 标签相对应的标签名称(例如:"b""h1" 等),则转换变得相当简单。它可能看起来像这样:

    def convert(self):
        html = ""
        for (key, value, index) in self.text.dump("1.0", "end"):
            self.converted.insert("end", str((key, value, index)) + "\n")
            if key == "tagon":
                html += "<{}>".format(value)
            elif key == "tagoff":
                html += "</{}>".format(value)
            elif key == "text":
                html += value
    

    对于示例窗口,上面会产生类似这样的结果:

    <h1>Hello, world!</h1>
    this is a test with some <b>bold text</b>.
    

    您必须添加一些额外的代码来处理段落,因为dump 方法只返回换行符而不是每个段落的标签,但除此之外它是一个相当简单的算法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      相关资源
      最近更新 更多