Canvas对象标签:不是我最初给它的类型

2024-03-05

我有一个画布,我向其中添加各种对象,例如文本对象等。我向每个画布子对象添加“标签”属性。在下面的示例中,我为绝对支持的“tag”属性添加了一个字典:

import tkinter

window = tkinter.Tk()
myCanvas = tkinter.Canvas( window, width = 400, height = 400 )
myCanvas.pack()

textItemTags = { "id": 1, "name": "test" }
textItemContents = "asdf"
textItem = myCanvas.create_text( 1, 1, tags = textItemTags, text = textItemContents )

# some method later on now tries to retrieve tag values for a selected canvas child object...
searchTags = myCanvas.gettags( textItem )

print( searchTags ) # array of strings
print( isinstance( searchTags[0], str ) ) # true..?

问题:注意返回结果searchTags using gettags画布对象的方法 - 这是现在代表每个行项目的字符串数组(“'id':1,'name':'test'”,“...”),而不是最初传入的实际字典。

我的问题是:1)为什么现在这是一个字符串数组,而不是我传入的原始字典(或至少是克隆); 2)我可以用什么万无一失的方法来解析这个字符串数组来准确地重建我最初传递给的内容create_text method?

免责声明:对于 Python 和 tkinter 来说相对较新,但检索画布子对象的标记值的结果对我来说似乎很奇怪。


根据Tk 画布文档 http://www.tcl.tk/man/tcl8.4/TkCmd/canvas.htm#M17:

每个项目还可以具有任意数量的与其关联的标签。一个标签 只是一串字符,它可以采取任何形式,除了 一个整数。例如,x123还好但是123 isn't…

根据 TkinterCanvas.create_text https://web.archive.org/web/20201105231837id_/http://effbot.org/tkinterbook/canvas.htm#Tkinter.Canvas.create_text-method文档:

tags=

A tag附加到该项目,或a tuple包含多个标签。

也在同一个Tkinter 简介 https://web.archive.org/web/20201105231837id_/http://effbot.org/tkinterbook/, the Tkinter 画布小部件 https://web.archive.org/web/20201108093851id_/http://effbot.org/tkinterbook/canvas.htm部分说:

Tags是附加在项目上的符号名称。标签是普通字符串,它们可以包含除空格(只要它们看起来不像物品手柄).

(斜体强调我的。)

看起来 Tkinter/Tk 转换了tags如果它不是字符串也不是元组,则参数为字符串。


如何使用字典将标签名称映射到字典:

import tkinter

window = tkinter.Tk()
myCanvas = tkinter.Canvas(window, width = 400, height = 400)
myCanvas.pack()

tag_mapping = {}                                      # <----
tag_mapping['tag1'] = { "id": 1, "name": "test" }     # <----
textItemContents = "asdf"
textItem = myCanvas.create_text(1, 1, tags='tag1', text = textItemContents)

searchTags = myCanvas.gettags(textItem)

print(searchTags) # => ('tag1',)
print(searchTags[0]) # => tag1
print(tag_mapping[searchTags[0]]) # => {'name': 'test', 'id': 1}
print(isinstance(tag_mapping[searchTags[0]], dict)) # => True
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Canvas对象标签:不是我最初给它的类型 的相关文章

随机推荐

  • 禁用 TabLayout 中的选项卡[重复]

    这个问题在这里已经有答案了 我用过TabLayout来自我的应用程序中最新的设计支持库 这些选项卡附加到一个视图分页器 该视图分页器加载每个选项卡的片段 我想禁用所有选项卡 直到视图页面加载用户选择的选项卡的片段 我无法禁用选项卡布局或使其
  • 使用 EPPlus 将 Excel 工作表格式化为表格

    我有一个 NET Core 应用程序 并且我不熟悉将 EPPlus 库与 C 一起使用 我有一个数据表 其中填充了我目前正在使用 EPPlus 将其插入到 Excel 工作表中的数据 我想知道是否有一种方法可以在将数据添加到工作表之后而不是
  • CUDA PTX 代码 %envreg<32> 特殊寄存器

    我尝试使用 CUDA 驱动程序 API 运行由 cl 内核生成的 PTX 汇编代码 我采取的步骤是这些 标准 opencl 程序 1 加载 cl内核 2 JIT编译 3 获取编译好的ptx代码并保存 到目前为止 一切都很好 我注意到 ptx
  • 在 Mobile Safari 上调试缓慢的 Angular-ui-router 状态更改

    我正在编写一个角度应用程序 使用 Angular ui router 来管理状态 路由 在桌面浏览器 Chrome Safari 上 这工作正常 然而 在 iPhone 4 上的 IOS 6 上的 Mobile Safari 上 以及 iP
  • 使用 WebBrowser .NET 控件放大网页

    IE7 中内置了 缩放 功能 显示在状态栏中 允许您放大至 400 我在演示 模拟应用程序中使用 WebBrowser NET 控件 并且需要放大网页 这是可能吗 我不想简单地拍摄页面照片并将其放大 因为我需要使用页面上的链接和按钮 如果重
  • Angular 6 - 无法解析AppComponent的所有参数

    我正在尝试使用 Angular 6 构建一个应用程序 但我仍在设置一切 但我的应用程序中的依赖注入似乎有问题 它无法解析任何构造函数参数 它们都导致Uncaught Error Can t resolve all parameters fo
  • Heroku 不支持 Neo4j?

    我正在尝试使用 Neo4j 数据库部署 Spring boot 应用程序 但是当我在 Heroku 中找到插件时 我看不到它 如何将 Neo4j 数据库推送到 Heroku 请帮我 先感谢您 This news https docs gra
  • JTable - 复合编辑器焦点

    我有一个由多个组件组成的自定义编辑器 就像是 class MyCellEditor extends AbstractCellEditor implements TableCellEditor JTextArea textArea JButt
  • 如何配置 Hibernate、Spring 和 Apache dbcp 进行连接池?

    我在集成 Spring Hibernate 和 Apache DBCP 时遇到问题 我已经用过DBCPConnectionProvider from here http wiki apache org commons DBCP Hibern
  • 西班牙 Windows 的字符集

    西班牙 Windows 的字符集是什么 Spanish es iso 8859 1 windows 1252
  • 有没有自动更新Javadoc的工具?

    我工作的代码库 很混乱 这种混乱的一方面是我们有大量方法 其签名不再与关联的 Javadoc 匹配 例如 param foo public void doFoo int bar 我不喜欢生成的 Javadoc 因为它几乎总是毫无价值 但我确
  • Android - Webview进度条

    我在网络视图上方添加了进度条 每当我单击链接时 我都会使进度条可见 我想让进度条覆盖在网络视图上 并且我想显示进度条的百分比 我知道css 但我不知道如何改变android中进度条的位置
  • 如何在 Perl 中刷新反引号中的输出?

    如果我有这个 Perl 应用程序 print someshellscript sh 它会打印一堆内容并且需要很长时间才能完成 我如何在 shell 脚本执行过程中打印该输出 看起来 Perl 只会在完成时打印 someshellscript
  • 如何将数据从一个视图控制器传递到另一个 SWIFT

    我正在制作一个应用程序 其中带有搜索栏和范围栏的表格视图必须连接到详细视图控制器 并且该详细视图控制器必须根据选择的单元格显示数据 我有一个数组 其中设置了用于排序和搜索项目的结构 我需要保留此功能 我的详细视图控制器有另一个 swift
  • 打印文本区域文本 - 全长(高度)?

    我有一个网络表单 我的客户希望用户能够打印出来 使用 CSS 进行一些样式设置就可以很好地工作 但是 我有几个textaear字段 如果用户键入的内容超过文本区域的高度 则打印时该类型将被截断 我努力了textarea height 100
  • D3 中的折线和图例间距

    我使用下面的示例 希望在饼图之外有图例 并且还具有文本的折线以及每个切片的计数和百分比 使用当前代码 我在饼内有饼图 当我将鼠标悬停在切片上时 会显示文本和百分比 非常感谢您的帮助 谢谢 有人可以帮忙吗 因为我无法继续前进
  • 获取 linq 返回 IEnumerable 结果

    如何将以下 SQL 查询转换为 C 中的 LINQ 我不需要两个表中的所有列 结果集应该是 IEnumerable
  • 管道转换后获取 ngFor 中数组的长度

    我有以下模板 div Here is the length of my ngFor l div 不幸的是 ngFor 中不存在长度 如何解决此问题以使 ngFor 中的长度可用 另一种解决方案可能如下 div Here is the len
  • 我可以将 sqlbulkcopy 与 Azure SQL Paas 结合使用吗?

    我可以将 sqlbulkcopy 与 Azure SQL Paas 结合使用吗 我有一个可以批量复制到数据库的应用程序 我们正在使用 SQL PaaS 对其进行测试 SQLBulkCopy 似乎失败了 我以为我读到某处不支持此功能 但在 A
  • Canvas对象标签:不是我最初给它的类型

    我有一个画布 我向其中添加各种对象 例如文本对象等 我向每个画布子对象添加 标签 属性 在下面的示例中 我为绝对支持的 tag 属性添加了一个字典 import tkinter window tkinter Tk myCanvas tkin