有没有办法克隆tkinter小部件?

时间:2017-09-30 18:48:15

标签: python-3.x tkinter

我正在尝试创建小部件网格。这个小部件网格以标签告诉我他们的坐标开始。然后我有一个替换它们的按钮的起点和终点列表。 假设我有一个从(0,0)到(0,2)的按钮,我从这个位置删除标签,并在那里放一个正确的rowspan按钮。 如果一个按钮将替换另一个按钮(不仅仅是一个标签),我创建一个框架,然后我想克隆该按钮作为一种更改父母的方式(我已经读过tkinter不可能)和同时将新按钮添加到框架中。然后框架将替换网格上的小部件(标签和旧按钮)并排按钮而不是重叠。

所以这个example image显示标签网格,然后放置第一个按钮的位置,然后是第二个按钮应该放在哪里,结果框架中并排有两个按钮。

对我来说最大的问题是必须删除第一个按钮并将其重新放在网格上,因为它无法更改小部件的父级。虽然我欢迎在网格上并排获取按钮的更好的想法。

1 个答案:

答案 0 :(得分:2)

没有直接的方法来克隆窗口小部件,但是tkinter为您提供了一种方法来确定窗口小部件的父级,窗口小部件的类以及窗口小部件的所有配置值。此信息足以创建副本。

它看起来像这样:

def clone(widget):
    parent = widget.nametowidget(widget.winfo_parent())
    cls = widget.__class__

    clone = cls(parent)
    for key in widget.configure():
        clone.configure({key: widget.cget(key)})
    return clone