如何手动将 .dump() 文件的输出解析为文本小部件

2024-01-10

我如何手动将 .dump() 的输出从包含斜体和粗体文本的文本小部件解析到不同的文本小部件以将其及其文本格式加载。

这是代码(如果有帮助的话),文本应该与文本格式一起保存,但是当文件打开时,文本格式消失了:

from tkinter import *
from tkinter import filedialog
root = Tk()

textpad=Text(root, font='Consolas 11')
textpad.pack()

def save():
    content=textpad.get(1.0,'end')
    filename=filedialog.asksaveasfilename(title='open file',filetypes=(("text","*.txt"),("html",".html"),("all types","*.*")))
    openit=open(filename,'w')
    openit.write(content)
    openit.close()

def opens():
    textpad.delete(1.0,'end')
    filename=filedialog.askopenfilename(title='open file',filetypes=(("text","*.txt"),("html",".html"),("all types","*.*")))
    openit=open(filename,'r')
    content=openit.read()
    textpad.insert('end',content.strip())
    openit.close()

def boldtext():
    textpad.selection_get()
    textpad.tag_add('bold','sel.first','sel.last')
    textpad.tag_config('bold',font='Consolas 11 bold')

savebtn=Button(text='save',command=save)
savebtn.pack()
openbtn=Button(text='open',command=opens)
openbtn.pack()
bold=Button(text='bold',command=boldtext)
bold.pack()
root.mainloop()

The Text widget dump方法返回元组列表。每个元组的形式为 (key, value, index). key将是以下之一:text, mark, tagon, tagoff, image, or window. value将依赖于密钥。index是文本中的位置。例如,与tagon and tagoff该值将是标签的名称。为了text它是一串文本字符。

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

当您致电dump方法你会得到类似下面的内容(为了清楚起见添加了换行符):

[('text', 'Here is a sentence with ', '1.0'),
 ('tagon', 'bold', '1.24'),
 ('text', 'bolded', '1.24'),
 ('tagoff', 'bold', '1.30'),
 ('text', ' and ', '1.30'),
 ('tagon', 'italic', '1.35'),
 ('text', 'italicized', '1.35'),
 ('tagoff', 'italic', '1.45'),
 ('text', ' text.', '1.45')]

转换函数需要循环该数据并处理每个键。例如,对于每个tagon您可以将标签添加到列表中,并且对于每个tagoff您可以将其从列表中删除。为了text标签,您只需插入带有当前标签列表的文本。

解决方案可能如下所示:

def undump(dump_data, target):
    tags = []
    for (key, value, index) in dump_data:
        if key == "tagon":
            tags.append(value)
        elif key == "tagoff":
            tags.remove(value)
        elif key == "mark":
            target.mark_set(value, index)
        elif key == "text":
            target.insert(index, value, tags)

给定一个名为source和第二个文本小部件名为target,你可以这样称呼它:

undump(source.dump("1.0", "end-1c"), target)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何手动将 .dump() 文件的输出解析为文本小部件 的相关文章

随机推荐

  • Applet 与 Servlet

    JAVA中Applet和Servlet有什么区别 Applet运行在客户端 servlet运行在服务器上 就这么简单 更具体地说 该小程序被下载到客户端 并在浏览器内的 JRE 中执行 并且可以在小程序框架内显示它想要显示的任何内容 相反
  • 屏幕抓取建议:交互式图表

    我最近学习了一些关于如何在 Python 中使用 BeautifulSoup 的教程 并学习了如何简单地从网页中抓取文本和 URL 我现在正在尝试从以下链接中抓取数据 http www study cam ac uk undergradua
  • ClosedXML 添加图像

    我可以使用 OpenXML 将图像添加到 Excel 电子表格中 然而 对于程序的其余部分 我使用 ClosedXML 来添加数据 我可以使用列和行索引在特定单元格添加数据 如果我可以将图像添加到 Excel 它目前似乎是一个单独的层 悬停
  • 解析可选参数和非可选参数

    我是 bash 的新手 在阅读并尝试了很多有关如何解析参数的内容后 我无法做我真正想做的事情 我想解析可选参数和非可选参数 更具体地说 我想解析 3 个参数 第一个 fastaq 文件 第二个 第二个可选 fastaq 文件 第三个参数将是
  • pgAdmin Docker 错误:“用户名或密码不正确”

    有一些简单的 docker compose yml 文件配置 但我不确定为什么我不能使用登录到 pgAdmin 电子邮件受保护 cdn cgi l email protection作为电子邮件和admin作为密码 是否需要更多配置或者我使用
  • PHP函数注释

    我看到一些 PHP 函数在顶部被注释 使用的格式我不知道 Convert an object to an array param object object The object to convert return array 我的 IDE
  • 快速检测用户点击屏幕

    我想删除UIView用户点击除该视图之外的其他内容后从屏幕上显示 为了让您形象化 我将上传我的视图草图 我想去掉蓝色UIView用户点击此视图中除按钮之外的其他内容后 我应该用什么 编辑 穿蓝色衣服UIView有两个按钮 我想在用户点击背景
  • 特质类别如何运作以及它们的作用是什么?

    我正在读斯科特 迈耶斯的书有效的C https rads stackoverflow com amzn click 0321334876 他在谈论特征类 我明白我需要它们在编译时确定对象的类型 但我无法理解他对这些类实际上做什么的解释 从技
  • Spark scala 中的枢轴

    我有一个这样的df M M Max Sales Rank M1 100 200 1 M1 100 175 2 M1 101 150 3 M1 100 125 4 M1 100 90 5 M1 100 85 6 M2 200 1001 1 M
  • 苹果开发者拒绝 - 应用程序中使用的订阅 - 商业 - 3.1.1

    苹果开发者以此理由拒绝了我的应用程序 商业 3 1 1 您的应用程序包含帐户注册功能 该功能被视为访问外部机制以在应用程序中使用购买或订阅 此功能不符合 App Store 审核指南 下一步 请删除帐户注册链接以及指向您网站的任何其他完全合
  • 如何在没有 jQuery 的情况下在 Javascript 中链接选择器

    在尝试操纵外部站点的布局时 我经常被迫使用一系列选择器来定位我想要的特定元素 我第一次遇到这个问题时 有人向我提供了一个 jQuery 解决方案 并且很容易得到结果 我不想依赖 jQuery 并且想知道这在标准 Javascript 中是否
  • JavaScript,在公共方法中将私有函数作为字符串调用,而不使用 eval (揭示模式)

    我试图在揭示模式中调用一个私有函数 这是我的代码 var module function var privateMethod function val console log val var publicMethod function va
  • 如何在 SQL Server 中获取具有复合主键的表列表?

    如何创建一个查询 为我提供 SQL Server 中具有复合主键的表列表 也许使用 sys tables 或 information schema tables 或其他东西 你可以挖掘这些信息information schema table
  • PHP计数替换[重复]

    这个问题在这里已经有答案了 我有一些代码在 PHP 7 以下运行的服务器上运行良好 但在 PHP 7 上我收到一条警告 需要删除 我需要修复代码以消除警告 我不能只是隐藏警告 我的问题是 count 函数 这是我收到的警告及其所引用的一小段
  • 我可以在调试时仅“跳过”jQuery 代码吗?

    在单步执行使用 jQuery 的脚本时 我just想要测试代码I wrote 我不想进入 jQuery 文件 我不是在调试 jQuery 只是在调试我自己的文件 有什么方法可以告诉调试器不要进入 jQuery 文件吗 我使用 Visual
  • Windows 10 - 任务计划程序 - 未运行 (0x41303)

    我正在尝试在 Windows 10 中安排一项任务 在 登录时 事件中启动多个程序 但在多次尝试 错误后它不会运行 任务配置如下 常规 无论用户是否登录都运行 它提示凭据输入框 也尝试仅在用户登录时运行 以最高权限运行 在尝试过的情况下配置
  • 如何在当前Vue实例上添加方法或数据?

    我是新来的Vue js我正在摆弄它 有没有办法创建可重用的方法和数据 这是我想要实现的非常简单的代码 第1页 html div div
  • 从 Assembly.GetTypes() 获取的类型的排序

    我有一个要求 我需要获取以下类型 public class Class1 public class Class2 Class1 public class Class3 Class1 我可以致电Assembly GetTypes 在目标程序集
  • IGrouping 不包含以下定义

    我一直在这里查看其他线程以了解如何在 linq 中执行 GroupBy 我遵循对其他人有效的精确语法 但是它不起作用 这是查询 var results from p in pending group p by p ContactID int
  • 如何手动将 .dump() 文件的输出解析为文本小部件

    我如何手动将 dump 的输出从包含斜体和粗体文本的文本小部件解析到不同的文本小部件以将其及其文本格式加载 这是代码 如果有帮助的话 文本应该与文本格式一起保存 但是当文件打开时 文本格式消失了 from tkinter import fr