首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在创建同一类型的另一个对象时复制一个tkinter对象的选项?

如何在创建同一类型的另一个对象时复制一个tkinter对象的选项?
EN

Stack Overflow用户
提问于 2017-02-23 23:21:56
回答 1查看 740关注 0票数 1

我试图使用另一个矩形的选项在Tkinter中绘制一个矩形。我不能硬编码选项/从第一个矩形获得哪些选项,因为我事先不知道它将有哪些选项。

我使用options = canvas.itemconfig(first)获得第一个矩形选项的字典,然后使用second = canvas.create_rectangle(150, 50, 300, 150, **options)绘制第二个矩形,但得到了以下错误:

_tkinter.TclError: bitmap "stipple {} {} {} {}" not defined

然后,我筛选了options字典,以删除没有值的参数(例如stipple),但随后得到了以下错误消息:

_tkinter.TclError: unknown color name "black red"

因为outline有两个值("black""red"),所以我在绘制第一个矩形时只给了它一个值

我还给出了第一个矩形两个标签,'rect''orig',这两个标签已经更改为'rect orig'

下面是选项字典在没有值的情况下过滤参数前后的样子:

原文词典:

{'stipple': ('stipple', '', '', '', ''), 'disabledoutlinestipple': ('disabledoutlinestipple', '', '', '', ''), 'offset': ('offset', '', '', '0,0', '0,0'), 'dash': ('dash', '', '', '', ''), 'disabledwidth': ('disabledwidth', '', '', '0.0', '0'), 'activeoutlinestipple': ('activeoutlinestipple', '', '', '', ''), 'dashoffset': ('dashoffset', '', '', '0', '0'), 'activewidth': ('activewidth', '', '', '0.0', '0.0'), 'fill': ('fill', '', '', '', 'blue'), 'disabledoutline': ('disabledoutline', '', '', '', ''), 'disabledfill': ('disabledfill', '', '', '', ''), 'disableddash': ('disableddash', '', '', '', ''), 'width': ('width', '', '', '1.0', '1.0'), 'state': ('state', '', '', '', ''), 'outlinestipple': ('outlinestipple', '', '', '', ''), 'disabledstipple': ('disabledstipple', '', '', '', ''), 'activedash': ('activedash', '', '', '', ''), 'tags': ('tags', '', '', '', 'rect orig'), 'activestipple': ('activestipple', '', '', '', ''), 'activeoutline': ('activeoutline', '', '', '', ''), 'outlineoffset': ('outlineoffset', '', '', '0,0', '0,0'), 'activefill': ('activefill', '', '', '', ''), 'outline': ('outline', '', '', 'black', 'red')}

过滤字典:

{'outline': ('black', 'red'), 'width': ('1.0', '1.0'), 'offset': ('0,0', '0,0'), 'disabledwidth': ('0.0', '0'), 'outlineoffset': ('0,0', '0,0'), 'dashoffset': ('0', '0'), 'activewidth': ('0.0', '0.0'), 'tags': ('rect orig',), 'fill': ('blue',)}

这是原始代码:

代码语言:javascript
复制
from Tkinter import *

root = Tk()
canvas = Canvas(root, width=600, height=400)
canvas.pack()

first = canvas.create_rectangle(50, 50, 200, 150, outline="red",
                                fill="blue", tags=("rect", "org"))

options = canvas.itemconfig(first)
print options

#second = canvas.create_rectangle(150, 50, 300, 150, **options)

root.mainloop()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-23 23:42:33

如您所见,itemconfig不只是返回简单键/值对的字典。对于每个选项,它将返回由以下五项组成的元组:

  1. 选项名
  2. 选项数据库的选项名
  3. 选项数据库的选项类
  4. 默认值
  5. 当前值

如果要复制所有选项,则需要为每个选项返回最后一项。

只要了解一下字典,你就可以很容易地做到这一点:

代码语言:javascript
复制
config = canvas.itemconfig(canvas_tag_or_id)
new_config = {key: config[key][-1] for key in config.keys()}
canvas.create_rectangle(coords, **new_config)

有关更多信息,请参阅

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42428048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档