Python 在鼠标单击时从指定的tkinter标签获取文本 books=[] 结果=数据库。回答查询(查询) 对于结果中的项目: 书本=标签(搜索页面,文本=项目,font=“无12粗体”,pady=2) book.grid(行=行计数,列=0,粘性=W) 书。附加(书) 行计数+=1 对于书本中的书本: book.bind(“,lambda e:BookInfoPage(book.cget(“text”)) book.bind(“”,lambda事件,h=book:h.configure(fg=“#638cbb”)) book.bind(“,lambda事件,h=book:h.configure(fg=“#000000”))

Python 在鼠标单击时从指定的tkinter标签获取文本 books=[] 结果=数据库。回答查询(查询) 对于结果中的项目: 书本=标签(搜索页面,文本=项目,font=“无12粗体”,pady=2) book.grid(行=行计数,列=0,粘性=W) 书。附加(书) 行计数+=1 对于书本中的书本: book.bind(“,lambda e:BookInfoPage(book.cget(“text”)) book.bind(“”,lambda事件,h=book:h.configure(fg=“#638cbb”)) book.bind(“,lambda事件,h=book:h.configure(fg=“#000000”)),python,tkinter,Python,Tkinter,这是当前代码,它加载多个标签并将它们放置在从db.answer\u query(query)返回的列表中每个索引的连续行上。此函数返回字符串值的列表 当前的问题是,对于”事件,我将参数book.cget(“text”)传递到函数BookInfoPage(),该函数提供有关单击图书名称的信息(由标签提供)。我想在鼠标单击时将指定tkinter标签中的文本传递到函数BookInfoPage(),但当前它仅传递上一个标签中的文本,无论单击哪个标签 这是因为book变量被识别为for循环列表中的最后一个

这是当前代码,它加载多个标签并将它们放置在从
db.answer\u query(query)
返回的列表中每个索引的连续行上。此函数返回字符串值的列表

当前的问题是,对于
事件,我将参数
book.cget(“text”)
传递到函数
BookInfoPage()
,该函数提供有关单击图书名称的信息(由标签提供)。我想在鼠标单击时将指定tkinter标签中的文本传递到函数
BookInfoPage()
,但当前它仅传递上一个标签中的文本,无论单击哪个标签

这是因为book变量被识别为for循环列表中的最后一个实体。有办法解决这个问题吗

我希望能够通过鼠标单击将指定tkinter标签中的文本传递到函数
BookInfoPage()

以下是当前工作应用程序的视频(gif):


请注意,即使我单击“哈利波特”,它也会给出“大毒气”的结果,即列表中的最后一个条目。

传递给回调的
事件
对象可以告诉您单击了哪个小部件。不要扔掉
事件
对象,而是使用它:

books = []
result = db.answer_query(query)
for item in result:
    book = Label(search_page,text=item,font="none 12 bold",pady=2)  
    book.grid(row=row_count, column=0, sticky = W)
    books.append(book)
    row_count += 1
for book in books:
    book.bind("<Button-1>", lambda e: BookInfoPage(book.cget("text")))
    book.bind("<Enter>", lambda event, h=book: h.configure(fg="#638cbb"))
    book.bind("<Leave>", lambda event, h=book: h.configure(fg="#000000"))

在调用
lambda
时,for的
循环早已完成,而
book
保留了它在最终迭代中的值。您知道如何解决这个问题,您为
绑定这样做了!
book.bind("<Button-1>", lambda event: BookInfoPage(event.widget.cget("text")))
def show_book(event):
    book = event.widget
    BookInfoPage(book.cget("text"))

book.bind("<Button-1>", show_book)