簡體   English   中英

單擊鼠標從指定的 tkinter 標簽中獲取文本

[英]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.

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