我已经构建了用于发送电子邮件的 tkinter 应用程序。电子邮件的正文应该从文本小部件中获取带有格式/样式的文本。有没有什么方法可以做同样的事情。
get 方法只给出文本而不给出样式/格式。
我已经构建了用于发送电子邮件的 tkinter 应用程序。电子邮件的正文应该从文本小部件中获取带有格式/样式的文本。有没有什么方法可以做同样的事情。
get 方法只给出文本而不给出样式/格式。
文本小部件有一个名为的方法dump
,它可以序列化文本小部件中的所有内容。它返回一个元组列表。每个元组的形式为(键、值、索引)。键将是以下之一:text
, mark
, tagon
, tagoff
, image
, 或window
. 该值将取决于键。例如,withtagon
和tagoff
值将是标签的名称。因为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
方法只返回换行符而不是每个段落的标签,但除此之外它是一个相当简单的算法。