在下面的代码中,我有一个树视图和一个按钮.每当树视图中的某个项目被选中时,我希望该按钮出现,每当按下该按钮时,我希望取消 Select 所选树视图项目,然后让该按钮消失.
这几乎奏效了.现在的情况是,只要按下按钮,Treeview选项就会被取消 Select ,但它不会消失.如果再次按下该按钮(树视图中未 Select 任何内容),它将消失.
当我调试这个时,我可以看到当clear_selection
函数运行时,table_row_selected
函数将被调用.我想这与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()