2016-09-01 78 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