2016-09-01 38 views
1

我有一个tkinter列表框,需要总是选择列表框中的某些项目。在我的应用程序中,这些项目是用户需要的,而列表框中的其他项目是可选的(应该是可选/不可选的)。总是选择一些Tkinter列表框项目

大多数示例使用'<<ListboxSelect>>'来绑定函数。

我不明白的是,如何获得用户从绑定事件中选择的确切单个项目?

在我的示例代码中,最初选择了​​,peaches,lettuce。假设我点击​​。通常这个事件将取消选择​​,但我希望我的功能在​​上运行并设置选择,所以它看起来像人为的,因为它不能被取消选择。

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() 

回答

2

好的,很好的问题。这是我想办法解决的一个解决方法,它似乎工作。

首先,创建要始终保持选择的指数的列表:

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) 
+1

谢谢!我可以做这项工作。为自己提供精神外带:首先建立所需项目的索引列表,然后进行设置。 – Jarad