Python 有没有一个简短的方法来列出这个?

Python 有没有一个简短的方法来列出这个?,python,linux,tkinter,Python,Linux,Tkinter,我想知道是否有一种更短的方法可以同时声明很多变量 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(s

我想知道是否有一种更短的方法可以同时声明很多变量

    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')

首先,我可能会以不同的方式来组织它,作为一个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]]:
    ...

但是,从根本上说,我认为代码中的所有重复都来自于使用一组单独的变量,而不是像列表或dict这样的结构化数据结构。

使用字典来存储对小部件的引用,然后在值列表上迭代:

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()

有几种方法,但您能否明确说明计划如何使用这些成员变量?我不清楚tkinter,但是这个代码片段只是请求用两个字典成员变量(一个用于
ent
s,一个用于
lal
s)来替换。相关
self.lal={};self.ent={};self.int={};对于[1,2,5,10,20,50100200500]中的i:self.lal[i]=ttk.Label(self.root,text='${}'。格式(i));self.ent[i]=ttk.Entry(self.root,textvariable=self.int[i],width=5,state='readonly')
在第二个示例块中,我认为您希望分配给
d[n]
而不是
d['n']
的可能副本。此外,括号在第一个块中似乎有误导性(您可能不想在
'ent'
键之前开始一个新的dict,它应该位于前一行
'lal'
的同一个dict中)。