我正在使用tkinter编写一个GUI,我有几行由一个带有Button小部件的Entry小部件组成。当我按下按钮时,回调打开了askdirectory对话框,并且选择的目录被写入Entry小部件,与点击按钮的行相同。
为了获得更优雅的解决方案,而不仅仅是复制/粘贴12次代码,我写了以下内容:
for i in range (0,12):
e[i] = Entry(master)
e[i].insert(0, "<Choose a directory...>")
e[i].config(width=70)
e[i].grid(row=i+2, column=0, sticky=NW, columnspan=2)
b[i] = Button(master, text="Choose directory", command=lambda: self.getDir(e[i]))
b[i].grid(row=i+2, column=2, sticky=N)
回调函数:
def getDir(self, e):
'''Retrieve directory and write it on the right "Entry" widget'''
dirName = askdirectory(title='Choose a directory:')
e.delete(0, END)
e.insert(0, dirName)
当我运行脚本时,我收到"list index out of range"
错误。
根据我的理解,这是因为i
- 稍后在代码中使用 - 不再是索引,只是在我构建按钮的那一刻,对吗?
那么,我该怎么做才能使回调了解哪个Button被点击以及它应该写入哪个条目?
答案 0 :(得分:0)
我只能猜测,因为你没有发布错误信息: 可能只是e和b的长度! e和b需要是至少长度为12的列表或元组...或者如果你只想处理你的代码12次,你根本不需要[i]。 我会将此作为评论发布,但我没有足够的分数这样做:(