我有一个tkinter窗口,它根据数据库查询生成的列表创建标签和条目小部件。
我需要使用在条目小部件中输入的值来创建一个新列表,以将其放入另一个数据库。
数据库中的列表有一个变量计数。我使用一个循环来创建标签和条目小部件,但无法解决如何命名条目小部件以将条目放入可用列表中。理想情况下,它将拥有来自原始查询的e.get和与每个条目相关联的列表。
这是我到目前为止所拥有的。
#Create frame for Size inputs and labels
sizes_frame = tk.Frame(p,bg='yellow')
sizes_frame.grid(row=2,column=1)
connection = sqlite3.connect('productdata.db')
pro = connection.cursor()
pro.execute("SELECT Size FROM Products WHERE ColourCode = ?", (e.get(),))
connection.commit()
Sizes = pro.fetchall()
keys = Sizes
otherkeys = Sizes
count = 0
othercount = 0
labels=[]
otherlabels=[]
for j,l in enumerate(labels):
l.config(text=str(keys[j])+str(j))
for key in keys:
labels.append(Label(sizes_frame,text=key,font=('Helvatical bold',10)))
if count <10:
labels[count].grid(row = count, column = 1, padx=5, pady= 5)
count+=1
else:
labels[count].grid(row = count-10, column = 3, padx=5, pady= 5)
count += 1
for j,l in enumerate(otherlabels):
l.config(text=str(otherkeys[j])+str(j))
for otherkey in otherkeys:
otherlabels.append(Entry(sizes_frame,width= 6))
if othercount<10:
otherlabels[othercount].grid(row = othercount, column = 2, padx=5, pady= 5)
othercount += 1
else:
otherlabels[othercount].grid(row = othercount-10, column = 4, padx=5, pady= 5)
othercount += 1发布于 2022-04-06 11:24:02
我不确定我是否理解问题,但也许你应该用字典和嵌套列表代替列表
all_labels = { e.get(): [] } # list inside dictionary
all_entries = { e.get(): [] } # list inside dictionary以及稍后附加小部件
all_labels[e.get()].append(label)
all_entries[e.get()].append(entry)稍后,您可以使用for循环和e.get()获取所有值。
for entry in all_entries[e.get()]:
print(entry.get())最终,您可以使用嵌套字典。
all_labels = { e.get(): {} } # dictionary inside dictionary
all_entries = { e.get(): {} } # dictionary inside dictionary以及稍后附加小部件
all_labels[e.get()][size] = label
all_entries[e.get()][size] = entry稍后,您可以使用for循环、e.get()和.items()获得所有值。
for size, entry in all_entries[e.get()].items():
print(size, entry.get())最小的示例与其他更改,以使代码更具可读性。
因为单词entry,entries和label,labels和size,sizes非常相似(而且会产生问题),所以我使用了前缀`all_。
sizes_frame = tk.Frame(p, bg='yellow')
sizes_frame.grid(row=2, column=1)
connection = sqlite3.connect('productdata.db')
pro = connection.cursor()
pro.execute("SELECT Size FROM Products WHERE ColourCode = ?", (e.get(),))
connection.commit()
all_sizes = pro.fetchall()
all_labels = { e.get(): {} }
all_entries = { e.get(): {} }
for number, size in enumerate(all_sizes):
label = tk.Label(sizes_frame, text=size, font=('Helvatical bold',10))
entry = tk.Entry(sizes_frame, width=6)
if number < 10:
label.grid(row=number, column=1, padx=5, pady=5)
entry.grid(row=number, column=2, padx=5, pady=5)
else:
label.grid(row=number-10, column=3, padx=5, pady=5)
entry.grid(row=number-10, column=4, padx=5, pady=5)
all_labels[e.get()][size] = label)
all_entries[e.get()][size] = entry
# --- in some function ---
for size, entry in all_entries[e.get()].items():
print(size, entry.get())
# ... add `size` and `entry.get()` to databasehttps://stackoverflow.com/questions/71765400
复制相似问题