使一些 Tkinter 列表框项目始终被选中
Make Some Tkinter Listbox Items Always Selected
我有一个 tkinter 列表框,其中列表框中的某些项目需要始终被选中。在我的应用程序中,这些项目是用户需要的,而列表框中的其他一些项目是可选的(应该是 selectable/deselectable)。
大多数示例使用 '<<ListboxSelect>>'
绑定函数。
我不明白的是,如何从绑定事件中获取用户选择的确切单项?
在我的示例代码中,最初选择了apples
、peaches
、lettuce
。假设我点击 apples
。通常此事件会取消选择 apples
,但我希望我的函数为 运行 并在 apples
上设置选择,因此它看起来人为地好像无法取消选择。
import tkinter as tk
root = tk.Tk()
requiredlb = tk.Listbox(root, exportselection=False, activestyle='none', selectmode=tk.MULTIPLE)
for i,item in enumerate(['apples', 'oranges', 'peaches', 'carrots', 'lettuce', 'grapes']):
requiredlb.insert(tk.END, item)
if i % 2 == 0:
requiredlb.selection_set(i)
requiredlb.grid(row=6, column=1, sticky='ew')
def always_selected(event):
widget = event.widget
## What Goes Here? ##
requiredlb.bind('<<ListboxSelect>>', func=always_selected)
root.mainloop()
好的,问得好。这是我设法想出的解决方法,它似乎有效。
首先,创建一个您希望始终保持选中状态的索引列表:
items = ['apples', 'oranges', 'peaches', 'carrots', 'lettuce', 'grapes']
special_items = [0, 2, 4]
for i,item in enumerate(items):
...
如您所见,我稍微修改了您的代码
然后在事件函数中始终确保通过明确选择这些索引来选择它们:
def always_selected(event):
widget = event.widget
for idx in special_items:
widget.selection_set(idx)
我有一个 tkinter 列表框,其中列表框中的某些项目需要始终被选中。在我的应用程序中,这些项目是用户需要的,而列表框中的其他一些项目是可选的(应该是 selectable/deselectable)。
大多数示例使用 '<<ListboxSelect>>'
绑定函数。
我不明白的是,如何从绑定事件中获取用户选择的确切单项?
在我的示例代码中,最初选择了apples
、peaches
、lettuce
。假设我点击 apples
。通常此事件会取消选择 apples
,但我希望我的函数为 运行 并在 apples
上设置选择,因此它看起来人为地好像无法取消选择。
import tkinter as tk
root = tk.Tk()
requiredlb = tk.Listbox(root, exportselection=False, activestyle='none', selectmode=tk.MULTIPLE)
for i,item in enumerate(['apples', 'oranges', 'peaches', 'carrots', 'lettuce', 'grapes']):
requiredlb.insert(tk.END, item)
if i % 2 == 0:
requiredlb.selection_set(i)
requiredlb.grid(row=6, column=1, sticky='ew')
def always_selected(event):
widget = event.widget
## What Goes Here? ##
requiredlb.bind('<<ListboxSelect>>', func=always_selected)
root.mainloop()
好的,问得好。这是我设法想出的解决方法,它似乎有效。
首先,创建一个您希望始终保持选中状态的索引列表:
items = ['apples', 'oranges', 'peaches', 'carrots', 'lettuce', 'grapes']
special_items = [0, 2, 4]
for i,item in enumerate(items):
...
如您所见,我稍微修改了您的代码
然后在事件函数中始终确保通过明确选择这些索引来选择它们:
def always_selected(event):
widget = event.widget
for idx in special_items:
widget.selection_set(idx)