Python 调用分配给StringVar()的函数时,如何在循环内保持i?
所以我想在循环中使用trace()。问题是跟踪调用的函数使用i传递变量。它只会导致调用列表中最后一个字符串Var,而不是all 该程序要做的是创建一个条目列表,并为每个条目分配一个字符串值,然后每当您键入条目时,都会使用trace()检查条目是否应被验证。False表示字母或数字不重要,20是字符限制Python 调用分配给StringVar()的函数时,如何在循环内保持i?,python,tkinter,tkinter-entry,Python,Tkinter,Tkinter Entry,所以我想在循环中使用trace()。问题是跟踪调用的函数使用i传递变量。它只会导致调用列表中最后一个字符串Var,而不是all 该程序要做的是创建一个条目列表,并为每个条目分配一个字符串值,然后每当您键入条目时,都会使用trace()检查条目是否应被验证。False表示字母或数字不重要,20是字符限制 self.label_list = [["First Name:","E",[False, 20]], ["Age","E",[False, 20]], ["Do you have
self.label_list = [["First Name:","E",[False, 20]], ["Age","E",[False, 20]], ["Do you have a mobile phone?: ","RB", ["Yes", "No"]], ["Mobile Phone:", "HE",[False, 20]]]
self.string_var_list = []
self.old_value_list = []
for i in range(len(self.label_list)):
self.string_var_list.append(StringVar())
self.old_value_list.append("")
self.entry_builder()
def entry_builder(self):
self.entry_list = []
rows = 0
current = 0
for i in range(len(self.label_list)):
if self.label_list[i][1] == "E":
self.entry_list.append(Entry(self.frame2, width=30, textvariable = self.string_var_list[i]))
self.entry_list[current].configure(command = self.checkgiver())
self.entry_list[current].grid(row=len(self.entry_list), column =1, padx=(60,10))
current += 1
def checkgiver(self):
local_list = []
print("good")
for i in range(len(self.label_list)):
if self.label_list[i][1] == "HE" or self.label_list[i][1] == "E":
print(self.label_list[i][2][1])
self.string_var_list[i].trace('w', lambda *args: self.check_name(self.string_var_list[i], len(self.string_var_list[i].get()),
self.label_list[i][2][0],self.label_list[i][2][1]))
def check_name(self, b, c, Type, Len):
if c > Len:
b.set(b.get()[:Len])
通过创建另一个函数并在checkgiver中调用它并将i传递给它,解决了这个问题
self.anotherfunc(i)
def anotherfunc(self,i):
self.trace_list.append(self.string_var_list[i].trace('w', lambda *args: self.check_name(self.string_var_list[i], len(self.string_var_list[i].get()),
self.label_list[i][2][0],self.label_list[i][2][1])))