Tkinter 列表框 - 选择列表框中的 ALL 而不是我选择的

时间:2021-02-14 03:21:11

标签: python tkinter listbox

我遇到了一个问题并一直在搜索,但没有找到任何我认识的类似内容。有一个链接显示了如何在延迟 200 毫秒后运行循环,但我无法按照代码进行操作。

我的问题是我得到了一些多个列表框代码,运行它,它拉出我想要的但不允许我选择一个选项。我在列表框中选择了任何内容的实例,该框被销毁并且它拉入了所有值,而不仅仅是我选择的值。一个我想通了,我确定选择多个也可以。

不确定如何将其放入循环中,延迟它,停止它,以便我可以浏览列表并选择一个项目。任何代码链接或资源也会很感激阅读。谢谢。

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 个答案:

答案 0 :(得分:1)

由于您使用了 self.selected_items = self.list_box.get(0, last=END),它将获取列表框中的所有项目。

您应该改用 self.selected_items = [self.list_box.get(x) for x in self.list_box.curselection()]

相关问题