Python循环变量名称

时间:2019-01-18 08:43:39

标签: python

我不确定我要做什么,所以我发现很难找到以下答案...

我正在删除许多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)

4 个答案:

答案 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)