Rename object internal repr, name // tkinter 问题

Rename object internal repr, name // tkinter problem

如何重命名对象的内部 repr/name?例如 <tkinter.Checkbutton object .!notebook2.!frame.!checkbutton><tkinter.Checkbutton object .!notebook2.!frame.!checkbutton01>.

我需要这样做,因为我遇到了问题,即 tkinter 将两个复选框检测为同一个复选框。它显示了它们两个,但是如果我单击其中一个,它也会切换另一个,如果我有 ~obj_name~.select(),它会切换它们两个。

两个复选框:

<tkinter.Checkbutton object .!checkbutton>
<tkinter.Checkbutton object .!notebook2.!frame.!checkbutton>

代码:

from tkinter import *
from tkinter import ttk

win = win = Tk()
win.minsize(950, 450)
win.maxsize(950, 450)

chb = []
shop_chb = []

chb.append(Checkbutton(win, text="test123"))
chb[0].place(x=830, y=10)

tabs_setting = ttk.Notebook(win, width=925, height=60)
tabs_setting.place(x=10, y=310)
tab_mp = Frame(tabs_setting, width=500, height=275, bg="lightgrey")
tab_mp.place(x=2, y=4)
tabs_setting.add(tab_mp, text="Marktplätze")

shop_chb.append(Checkbutton(tab_mp, text=test678))
shop_chb[0].grid(column=0, row=0)

win.mainloop()

这当然只是一个非常简单的问题模型。但它显示了问题。如果您切换一个复选框,则两个复选框都会切换。这就是为什么我有重命名内部对象名称/repr 的想法。这可能吗?这个问题是否有其他解决方案?

您所要求的并不是您遇到的问题的正确解决方案。

检查按钮被设计为与特殊的 tkinter 变量之一相关联(StringVarIntVar 等)。如果您不提供,tkinter 将使用小部件的名称为您创建一个。由于您没有为小部件指定显式名称,因此小部件的最后一部分命名为“!checkbutton”,这是 tkinter 用于变量的名称。因此,两个复选按钮最终共享同一个变量。

如果你给复选按钮变量,你的问题就会消失。

...
var1 = IntVar(value=0)
chb.append(Checkbutton(win, text="test123", variable=var1))
...
var2 = IntVar(value=0)
shop_chb.append(Checkbutton(tab_mp, text="test678", variable=var2))
...