在下面的代碼中,我有一個 Treeview 和一個按鈕。Whenever an item in the Treeview is selected, I want the button to appear, when ever the button is pressed, I want to deselect the selected Treeview item, and then have the button disappear.
這幾乎可以作業。發生的情況是,只要按下按鈕,就會取消選擇 Treeview 選擇,但它不會消失。如果再次按下該按鈕(在 Treeview 中未選擇任何內容),它將消失。
當我除錯它時,我可以看到函式運行table_row_selected時會呼叫該clear_selection函式。我認為這與table.selection_remove激活系結有關table
有什么想法可以讓這個功能發揮作用嗎?
import tkinter as tk
from tkinter import ttk
# Whenever a table row is selected, show the 'clear_button'
def table_row_selected(clear_button):
clear_button.grid(column=0, row=1)
# Whenver clear_button is clicked, clear the selections from the
# table, then hide the button
def clear_selection(table, clear_button):
for i in table.selection():
table.selection_remove(i)
clear_button.grid_forget()
root = tk.Tk()
content = ttk.Frame(root)
table = ttk.Treeview(content)
# Create clear_button, call configure to assign command that hides clear_button
clear_button = ttk.Button(content, text='Clear')
clear_button.configure(command=lambda: clear_selection(table, clear_button))
# Setup table columns
table['columns'] = 'NAME'
table.heading('NAME', text='Name')
# Layout widgets
content.grid(column=0, row=0)
table.grid(column=0, row=0)
# Bind selection to tree widget, call table_row_selected
table.bind('<<TreeviewSelect>>', lambda event: table_row_selected(clear_button))
# Fill in dummy data
for i in ['one', 'two', 'three']:
table.insert('', tk.END, values=i)
root.mainloop()
uj5u.com熱心網友回復:
基于以下檔案<<TreeviewSelect>>:
<<TreeviewSelect>>
Generated whenever the selection changes.
因此,只要選擇更改,無論專案被選中還是取消選中,都會執行回呼。因此,當您清除所有選擇時,將執行回呼并顯示按鈕。
需要檢查里面是否有選中的itemtable_row_selected()來判斷是否顯示按鈕:
def table_row_selected(clear_button):
if table.selection():
clear_button.grid(column=0, row=1)
如果要將樹視圖作為引數傳遞,則需要更改函式的定義以及函式的呼叫方式:
def table_row_selected(table, clear_button):
if table.selection():
clear_button.grid(column=0, row=1)
...
table.bind('<<TreeviewSelect>>', lambda event: table_row_selected(event.widget, clear_button))
...
請注意,您可以使用
table.selection_set('')
取代:
for i in table.selection():
table.selection_remove(i)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/441035.html
