[英]Python loop variable names
我不確定我要做什么,所以我發現很難找到以下答案...
我正在刪除許多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)
您可以通過將循環迭代更改為以下四個條目的元組來完成此工作:
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]
等。
您可以解決此問題,將屬性名稱創建為字符串並使用getattr(obj, attrname)
,即:
for x in range(1, 5):
attrname = "entryplot_val{}".format(x)
getattr(self, attrname).delete(0, tk.END)
但是實際上,當您發現自己使用“ var1”,“ var2”(...)“ varX”命名方案時,您可能真的想要一個列表。
您可以像這樣使用get_attr()
:
for x in range(1, 5):
get_attr(self, "entryplot_val{}".format(x)).delete(0, tk.END)
請參閱文檔的這一部分 。
您可以使用字符串獲取變量名稱。
for x in range(1, 5):
attr_name = f'entryplot_val{x}'
getattr(self, attr).delete(0, tk.END)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.