我不确定我要做什么,所以我发现很难找到以下答案...
我正在删除许多tkinter条目小部件的内容。 我有四行看起来可以用循环替换为一行。 我尝试过...
for x in range(1, 5):
self.entryplot_valx.delete(0, tk.END)
但是我不知道如何在...中输入值 以下是我的代码-对于这个问题的愚蠢表示歉意
self.entryplot_val1.delete(0, tk.END)
self.entryplot_val2.delete(0, tk.END)
self.entryplot_val3.delete(0, tk.END)
self.entryplot_val4.delete(0, tk.END)
答案 0 :(得分:3)
您可以通过将循环更改为以下四个条目的元组来使这项工作有效:
entries = (self.entryplot_val1,
self.entryplot_val2,
self.entryplot_val3,
self.entryplot_val4)
for x in entries:
x.delete(0, tk.END)
由于您不想每次都创建此元组,因此让我们将其移至对象初始化:
def __init__(self):
# assuming you have a setup like the following
master = Tk()
self.entryplot_val1 = Entry(master)
self.entryplot_val2 = Entry(master)
self.entryplot_val3 = Entry(master)
self.entryplot_val4 = Entry(master)
# initialize your tuple to use in your for loop
self.entries = (self.entryplot_val1,
self.entryplot_val2,
self.entryplot_val3,
self.entryplot_val4)
# some further setup for entries
self.entryplot_val1.pack()
self.entryplot_val2.pack()
self.entryplot_val3.pack()
self.entryplot_val4.pack()
然后您可以将其进一步简化为:
def __init__(self):
# assuming you have a setup like the following
master = Tk()
self.entries = (Entry(master), Entry(master), Entry(master), Entry(master))
# some further setup for entries
for x in self.entries:
x.pack()
然后,您可以在类代码中其他地方使用以最后一个示例形式出现的循环。
由于您删除了条目的先前标识符,因此,您需要更改代码以在使用新元组的任何地方使用它们。也就是说,将self.entryplot_val1
更改为self.entries[0]
,将self.entryplot_val2
更改为self.entries[1]
,依此类推。
答案 1 :(得分:0)
您可以解决此问题,将属性名称创建为字符串并使用getattr(obj, attrname)
,即:
for x in range(1, 5):
attrname = "entryplot_val{}".format(x)
getattr(self, attrname).delete(0, tk.END)
但是实际上,当您发现自己使用“ var1”,“ var2”(...)“ varX”命名方案时,您可能真的想要一个列表。
答案 2 :(得分:0)
您可以像这样使用get_attr()
:
for x in range(1, 5):
get_attr(self, "entryplot_val{}".format(x)).delete(0, tk.END)
请参阅文档的this part。
答案 3 :(得分:0)
您可以使用字符串获取变量名。
for x in range(1, 5):
attr_name = f'entryplot_val{x}'
getattr(self, attr).delete(0, tk.END)