Tkinter- ListBox Выбрать инверсию выделенных в данный момент предметов - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь сделать кнопку, которая будет автоматически выбирать инверсию того, что в данный момент выбрано.Я плохо пытался создать эту функцию в приведенном ниже коде, но она не работает.В моем коде я пытаюсь выделить все, а затем отменить выбор того, что было изначально выбрано, что будет эквивалентно получению обратного.Может кто-нибудь взглянуть на мой код и посмотреть, что не так?

from tkinter import *
from tkinter import ttk

main = Tk()
main.geometry("+50+150")
frame = ttk.Frame(main, padding=(3, 3, 12, 12))
frame.grid(column=0, row=0, sticky=(N, S, E, W))

lstbox = Listbox(frame, selectmode=MULTIPLE, width=20, height=10)
lstbox.grid(column=0, row=0, columnspan=2)

for i in range(10):
    lstbox.insert(0, i)

def select(evt):
    global selected
    global selection
    selection = lstbox.curselection()
    for i in selection:
        selected = lstbox.get(i)
        print(selected)

lstbox.bind('<<ListboxSelect>>', select)

def select_inverse():
    lstbox.selection_set(0, END)
    lstbox.selection_clear(selected, selected)

btn = ttk.Button(frame, text="Inverse", command=select_inverse)
btn.grid(column=1, row=1)

main.mainloop()

1 Ответ

0 голосов
/ 15 ноября 2018

Вы почти у цели, но вам не нужны фактические значения элементов списка. Вы можете выполнять свою работу, используя только индексы.

Кроме того, вам не нужен (по крайней мере, не для этой конкретной задачи) метод select, к которому вы привязываетесь lstbox. Вы можете напрямую работать в select_inverse.

def select_inverse():
    selection = lstbox.curselection()
    lstbox.selection_set(0, END) 
    for item in selection:
        lstbox.selection_clear(item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...