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)