Tkinter Listbox — выбирает ВСЕ в listbox вместо того, что я выбираю

#python #tkinter #listbox

#python #tkinter #listbox

Вопрос:

Я столкнулся с проблемой и искал, но не нашел ничего похожего, что я узнал. Была одна ссылка, которая показывала, как запустить цикл после задержки в 200 мс, но я не мог следовать коду.

Моя проблема в том, что я получил несколько кодов listbox, запустил его, и он вытащил то, что я хотел, НО не позволил мне выбрать один вариант. В случае, когда я выбрал что-либо в listbox, поле было уничтожено, и оно извлекло ВСЕ значения вместо только того, которое я выбрал. Я понимаю это, я уверен, что выбор нескольких также будет работать.

Не уверен, как поместить это в цикл, отложить, остановить, чтобы я мог просмотреть список и выбрать элемент (ы). Любые ссылки на код или ресурсы также были бы признательны за чтение. Спасибо.

 import PyPDF2 as pdf2
import tkinter as tk
from tkinter import *

class PDF:
    #def __init__(self):
    #    pass

    def pdfItemExtract(self) -> None:
        

        # Create tkinter Tk based Main Window
        self.master_win = Tk()                              # Primary widget win.  Tk GUI style
        self.master_win.title("Resume Extract Options")
        self.master_win.geometry('300x300')

        # Vert scroll capability on right side of window
        yscrollbar = Scrollbar(self.master_win)
        yscrollbar.pack(side=RIGHT, fill=Y)

        label = Label(self.master_win,
                      text="Select the languages below :  ",
                      font=("Times New Roman", 10),
                      padx=10, pady=10)
        label.pack()                                        #Centers lbl (feature of pack)

        # Widget expands horizontally and
        # vertically by assigning both to
        # fill option
        self.list_box = Listbox(self.master_win,
                                selectmode="MULTIPLE",
                                yscrollcommand=yscrollbar.set)
        self.list_box.pack(padx=10, pady=10,
                  expand=YES, fill="both")

        x = ["C", "C  ", "C#", "Java", "Python",
             "R", "Go", "Ruby", "JavaScript", "Swift",
             "SQL", "Perl", "XML"]

        for each_item in range(len(x)):
            self.list_box.insert(END, x[each_item])
            self.list_box.itemconfig(each_item, bg="light blue")

        # Attach listbox to vertical scrollbar
        yscrollbar.config(command=self.list_box.yview)      #yview: allows lbox vert scrollable

        self.list_box.bind("<<ListboxSelect>>", self.callback)
        self.master_win.mainloop()
        return self.selected_items

    def callback(self, eventObject):                                # Call back generates var. We call it 'event'
        print(eventObject)
        self.selected_items = self.list_box.get(0, last=END)
        self.master_win.destroy()
 

/* ——— Основная программа ——— */

 from m_pdf import *

if __name__ == '__main__':

    pdf = PDF()
    extract_list = pdf.pdfItemExtract()
 

Ответ №1:

Поскольку вы использовали self.selected_items = self.list_box.get(0, last=END) , он получит все элементы в listbox.

Вы должны использовать self.selected_items = [self.list_box.get(x) for x in self.list_box.curselection()] вместо этого.

Комментарии:

1. Спасибо!!! Извините, что не ответил раньше. Погода в Техасе.