tkinter文本小部件为html

时间:2018-10-21 10:30:47

标签: tkinter text widget sendmail tkinter-text

我已经构建了tkinter应用程序来发送电子邮件。电子邮件正文应从文本小部件中获取具有格式/样式的文本。有没有做同样的方法。

get方法仅提供文本,而没有样式/格式。

1 个答案:

答案 0 :(得分:2)

文本小部件具有名为dump的方法,该方法可以序列化文本小部件中的所有内容。它返回一个元组列表。每个元组的形式(键,值,索引)。 key 将是以下之一:textmarktagontagoffimage或{{1} }。该值取决于密钥。例如,对于windowtagon,该值将成为标记的名称。对于tagoff,它是文本。

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

enter image description here

当您调用text方法(例如:dump)时,您将获得类似以下内容的信息:

self.text.dump("1.0", "end")

转换程序只需要遍历该数据并处理每个键。如果您使用与html标签相对应的标签名称(例如:( ('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'), ) "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>. 方法仅返回换行符而不是每个段落的标签,因此您必须添加一些其他代码来处理段落,但这是相当简单的算法。