我想知道是否有更短的方法可以同时声明很多变量
self.lal500 = ttk.Label(self.root, text='$500')
self.ent500 = ttk.Entry(self.root, textvariable=self.int500, width=5, state='readonly')
self.lal200 = ttk.Label(self.root, text='$200')
self.ent200 = ttk.Entry(self.root, textvariable=self.int200, width=5, state='readonly')
self.lal100 = ttk.Label(self.root, text='$100')
self.ent100 = ttk.Entry(self.root, textvariable=self.int100, width=5, state='readonly')
self.lal50 = ttk.Label(self.root, text='$50')
self.ent50 = ttk.Entry(self.root, textvariable=self.int50, width=5, state='readonly')
self.lal20 = ttk.Label(self.root, text='$20')
self.ent20 = ttk.Entry(self.root, textvariable=self.int20, width=5, state='readonly')
self.lal10 = ttk.Label(self.root, text='$10')
self.ent10 = ttk.Entry(self.root, textvariable=self.int10, width=5, state='readonly')
self.lal5 = ttk.Label(self.root, text='$5')
self.ent5 = ttk.Entry(self.root, textvariable=self.int5, width=5, state='readonly')
self.lal2 = ttk.Label(self.root, text='$2')
self.ent2 = ttk.Entry(self.root, textvariable=self.int2, width=5, state='readonly')
self.lal1 = ttk.Label(self.root, text='$1')
self.ent1 = ttk.Entry(self.root, textvariable=self.int1, width=5, state='readonly')
答案 0 :(得分:0)
使用字典存储对窗口小部件的引用,然后迭代值列表:
self.labels = {}
self.entries = {}
for value in [1, 2, 5, 10, 20, 50, 100, 200, 500]:
self.labels[value] = entry = tk.Entry(self, width=5, state='readonly')
self.entries[value] = label = tk.Label(self, text="$%s" % value)
您可以使用以下内容获取任何条目的值:self.entries[100].get()
答案 1 :(得分:-1)
首先,我可能会以不同的方式构造它,如dict,即类似
d = {500:
{'lal': ttk.Label ...
'ent': ttk.Entry ...
...
}
然后我用理解或循环创建它,类似这样:
for n in 1,2,5,10,20,50, ...:
d[n] = {'lal': ttk.label.... text='$'+str(n),
'ent': ttk. ... }
了解更多关于self.int500
& c的信息。是的,很难完全填补空白。
如果它是常规模式,您还可以遍历列表理解:
for n in [i*f for f in [1,10,100] for i in [1,2,5]]:
...
但是,从根本上说,我认为代码中的所有重复都来自于使用一堆单独的变量,而不是像列表或字典这样的结构化数据结构。