【问题标题】:Python 2.7: Adding new items to Tkinter listbox without adding existing valuesPython 2.7:向 Tkinter 列表框添加新项目而不添加现有值
【发布时间】:2017-02-03 19:05:56
【问题描述】:

我正在编写一个简单的批量文件实用程序。我在 GUI 中有两个列表框。 Listbox1 包含存在于用户选择的任何目录中的文件列表。然后,用户可以将 listbox1 中的选定项目添加到 listbox2。目前这允许添加重复的项目。我想弄清楚如何检查 listbox2 中是否已经存在选定的项目,并且只添加不存在的项目。

这是我的代码:

from Tkinter import * 
import Tkinter, Tkconstants, tkFileDialog, tkMessageBox
import os, sys



class FileZap():
    def __init__(self, root):

        def getDir():
            dir = tkFileDialog.askdirectory(initialdir="C:/")
            self.user1.delete(0,END)
            self.user1.insert(0,dir)
            files = (file for file in os.listdir(dir)
                if os.path.isfile(os.path.join(dir, file)))
            for file in files:
                self.listbox1.insert(0,file)

        def selectAdd():
            selection1 = self.listbox1.curselection()
            for i in selection1:
                selectedFiles = self.listbox1.get(i)
                self.listbox2.insert(0, selectedFiles)

        root.title("Test_App 1.0")
        root.geometry("860x450")    
        self.listbox1 = Listbox(root, width=50, selectmode="multiple")
        self.listbox1.grid(row=2, column=2)
        self.scrollbar = Scrollbar(orient=VERTICAL, command=self.listbox1.yview)
        self.listbox1.config(yscrollcommand=self.scrollbar.set)
        self.scrollbar.grid(row=2, column=3, sticky="ns")
        self.listbox2 = Listbox(root, width=50)
        self.listbox2.grid(row=2, column=4)
        self.label1 = Label(root, text="Select a folder: ")
        self.label1.grid(row=1, column=1)
        self.user1 = Entry(root, width="50")
        self.user1.grid(row=1, column=2)
        self.browse = Button(root, text="Browse", command=getDir)
        self.browse.grid(row=1, column=3)
        self.button2 = Button(root, text="Add to Selection", command=selectAdd)
        self.button2.grid(row=3, column=3)

        self.quit = Button(root, text="Exit", command=root.quit)
        self.quit.grid(row=8, column=4)


root = Tkinter.Tk()
file_zap = FileZap(root)
root.mainloop()

在上面的代码中,函数 selectAdd() 执行项目操作。我希望通过在返回listbox2中的值的函数中添加另一个for循环来做到这一点,如果不在listbox2中则添加项目。但是我似乎只能使用 .get 返回选定的值,我不知道如何选择所有值。我也不确定这是否是最好的方法。任何帮助将不胜感激!

【问题讨论】:

    标签: python python-2.7 tkinter listbox


    【解决方案1】:

    如何使用listbox2.get(0,END) 获取当前在第二个列表框中的所有值,如果没有重复,添加 selectedFiles:

    def selectAdd():
        selection1 = self.listbox1.curselection()
        for i in selection1:
            selectedFiles = self.listbox1.get(i)
            list2files = self.listbox2.get(0, END)
            if selectedFiles not in list2files:
                self.listbox2.insert(0, selectedFiles)
    

    【讨论】:

    • 好吧,我现在觉得自己很蠢。我试图创建新列表并使用 'not in' 和 .append 来执行此操作。我没有意识到 .get 可以做到这一点。非常感谢,就像一个魅力。
    猜你喜欢
    • 2018-03-28
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多