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 变量之一相关联(StringVar
、IntVar
等)。如果您不提供,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))
...
如何重命名对象的内部 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 变量之一相关联(StringVar
、IntVar
等)。如果您不提供,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))
...