2016-09-01 2 views
1

У меня есть список tkinter, в котором нужно всегда выбирать некоторые элементы в списке. В моем приложении эти элементы требуются пользователем, тогда как некоторые другие элементы в списке являются необязательными (должны быть выбраны/отменены).Сделать некоторые элементы списка Tkinter всегда выбранными

Большинство примеров связывают функцию, используя '<<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() 

ответ

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

Смежные вопросы