我有一個 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
uj5u.com熱心網友回復:
我不確定我是否理解問題,但也許你應該使用帶有嵌套串列的字典而不是串列
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()and獲取所有值.items()
for size, entry in all_entries[e.get()].items():
print(size, entry.get())
其他更改的最小示例以使代碼更具可讀性。
因為單詞entry, entriesand label, labelsand 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 database
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/456967.html
