我有一个类,我发现自己在其中多次定义了类似的变量组,以至于我相信如果我能够在循环中这样做会更清楚,如下所示:
import tkinter as tk
from tkinter import ttk
class MyClass:
def __init__(self):
self.initializeVariables()
def initializeVariables(self):
varnames = ['a', 'b', 'c', 'd']
for var in varnames:
exec("self.bg{0} = ttk.Frame(self.Frame)".format(var))
exec("self.tb{0} = ttk.Entry(bg{0}, width=4)".format(var))
exec("self.tb{0}.grid(row=i)".format(var))
我有比这更多的元素,这个例子只是为了说明。我想知道:
- 有没有办法不使用
exec函数就可以完成这个任务?我尝试使用globals(),但没有成功 - 这样做不可取吗?在我看来,这使代码更易于阅读,但我不知道该领域的典型约定。
请您参考如下方法:
无需为每个小部件设置单独的对象属性。在这种情况下,在循环中创建属性会增加复杂性,而不会提供任何实际值(value)。
我建议使用列表或字典来存储引用:
def initializeVariables(self):
varnames = ['a', 'b', 'c', 'd']
self.frames = {}
self.entries = {}
for var in varnames:
self.frames[var] = ttk.Frame(...)
self.entries[var] = ttk.Entry(...)
您以后可以通过他们的名字访问他们。例如:
self.entries["c"].get()
除非您需要在代码的其他部分访问框架,否则您可以为框架使用局部变量:
for var in varnames:
frame = tk.Frame(...)
self.entries[var] = ttk.Entry(frame, ...)
