[英]Getting text from a specified tkinter label on mouse click
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"))
這是加載多個標簽並將它們放置在從db.answer_query(query)
返回的列表中每個索引的連續行上的當前代碼。 此函數返回字符串值列表。
我目前遇到的問題是,對於"<Button-1>"
事件,我將參數book.cget("text")
傳遞到函數book.cget("text")
BookInfoPage()
,該函數提供有關單擊的書籍名稱的信息(從標簽提供)。 我想在鼠標單擊時將來自指定 tkinter 標簽的文本傳遞到函數BookInfoPage()
但目前它只傳遞來自最后一個標簽的文本,無論單擊哪個標簽。
這是因為book變量被識別為 for 循環列表中的最后一個實體。 有沒有辦法解決這個問題?
我希望能夠在鼠標單擊時將來自指定 tkinter 標簽的文本傳遞到函數BookInfoPage()
。
這是當前工作應用程序的視頻 (gif): https : //imgur.com/a/9sjynxm
請注意,即使我單擊“哈利波特”,它也會為我提供“偉大的加斯比”的結果,即列表中的最后一個條目。
傳遞給回調的event
對象可以告訴您單擊了哪個小部件。 與其扔掉event
對象,不如使用它:
book.bind("<Button-1>", lambda event: BookInfoPage(event.widget.cget("text")))
一個可以說更好的解決方案是調用一個適當的函數,並使用event
對象來獲取被點擊的小部件。 使用函數更容易編寫、閱讀和調試。
def show_book(event):
book = event.widget
BookInfoPage(book.cget("text"))
book.bind("<Button-1>", show_book)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.