我在 SO 和其他網站上查找并測驗了許多類似的問題/答案/可能的重復項,但為了簡單起見和最小的可重現示例約束滿足度,我特別有興趣使用下面的解決方案。
為什么對先前答案的代碼進行以下修改不起作用/如何使其起作用?
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tree = ttk.Treeview(root)
tree.pack(fill="both", expand=True)
items = []
for i in range(10):
item = tree.insert("", "end", text="Item {}".format(i 1))
items.append(item)
items_to_select = items[:]
def select_all_items(event):
tree.selection_set(items_to_select)
tree.bind('<Button-1>', select_all_items)
root.mainloop()
原始答案按原樣作業。
我正在尋找一種方法來使其與滑鼠事件 Button-1 click 一起使用。當用戶用滑鼠左鍵 (Button-1) 單擊任何一項時,結果應該執行樹視圖中所有專案的選擇。
uj5u.com熱心網友回復:
由于滑鼠單擊樹視圖的任何行的默認操作將清除以前的選擇并選擇單擊的行。
要禁用默認操作,請從回呼中回傳“break”:
def select_all_items(event):
tree.selection_set(items)
return "break"
然后單擊樹視圖中的任何行將選擇其中的所有行。
請注意,您可以items直接使用而無需將其克隆到新變數。
uj5u.com熱心網友回復:
嘗試這個:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tree = ttk.Treeview(root)
tree.pack(fill="both", expand=True)
items = []
for i in range(10):
item = tree.insert("", "end", text="Item {}".format(i 1))
items.append(item)
#items_to_select = []
for item in items:
tree.insert('', tk.END, values=item)
def select_all_items(event):
for selected_item in tree.selection():
item = tree.item(selected_item)
print(item)
#tree.selection_set(items_to_select)
tree.bind('<Button-1>', select_all_items)
root.mainloop()
您也可以用代碼代替。return "break" 我注釋掉了第 14 行。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tree = ttk.Treeview(root)
tree.pack(fill="both", expand=True)
items = []
for i in range(10):
item = tree.insert("", "end", text="Item {}".format(i 1))
items.append(item)
#items_to_select = []
for item in items:
tree.insert('', tk.END, values=item)
def select_all_items(event):
tree.selection_set(items)
return "break"
tree.bind('<Button-1>', select_all_items)
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/536907.html
標籤:Pythonpython-3.xtkinter树视图鼠标事件
上一篇:型別錯誤:btn_add()缺少1個必需的位置引數:'first_number'
下一篇:DBA實戰面試題(一)
