簡體   English   中英

tkinter 用於連接到 sqlite3 的循環條目綁定

[英]tkinter for loop entry bind connected to sqlite3

我很難通過在 for 循環中創建的條目的綁定返回正確的 sqlite3 行

我知道,我不知道如何用文字來解釋,所以這是一段代碼

    if x == '':
        counter_kit_label = 10
        for kit in find_everything_from_db('*', 'kit'):
            kit_label = tk.Label(self.kit_listbox, text=f"{kit[0]}, {kit[1].capitalize()}, {kit[2].capitalize()},",
                                 bg='white')
            kit_label.place(x=5, y=counter_kit_label)
            kit_label.bind('<Enter>', lambda event: evidenzia(event))
            kit_label.bind('<Leave>', lambda event: non_evidenzia(event))
            kit_label.bind('<Button-1>', lambda: None)  # todo: creare event bind
            kit_entry_var = tk.StringVar()
            kit_entry = tk.Entry(self.kit_listbox, textvariable=kit_entry_var)
            kit_entry_var.set(f"{kit[4].capitalize()}")
            kit_entry.place(x=108, y=counter_kit_label)
            kit_entry.bind('<Return>', lambda event: self.modifica_luogo_kit(kit_entry.get(), kit, event))
            counter_kit_label += 30
    else:
        pass
def modifica_luogo_kit(self,luogo, kit, event=None):
    print(event.widget.get())
    print(kit)

當我運行腳本並在第一個 tk.Entry 上按“返回鍵”時,“print(event.widget.get())”的打印結果對應於 sqlite3 選項卡第一行預設的第一個條目,但是“ print(kit)" 對應sqlite3 tab的最新一行

嘗試這個:

import tkinter as tk
from functools import partial

def modifica_luogo_kit(luogo, kit, event=None):
    print("Data in widget =", luogo.get())
    print("Entry number:", kit)

root = tk.Tk()

for kit in range(10):
    kit_entry = tk.Entry(root)
    kit_entry.pack()
    command = partial(modifica_luogo_kit, kit_entry, kit)
    kit_entry.bind("<Return>", command)

我刪除了所有不必要的細節,以便更容易解決問題。 我使用functools.partial創建了一個在按下“ <Return> ”時執行的命令。 有關functools.partial的更多信息,請查看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM