2017-02-03 5 views
0

Ich schreibe eine einfache Bulk-Datei-Dienstprogramm. Ich habe zwei Listenfelder in der GUI. Listbox1 enthält eine Liste von Dateien, die in dem Verzeichnis vorhanden sind, das der Benutzer auswählt. Der Benutzer kann dann ausgewählte Elemente in Listbox1 zu Listbox2 hinzufügen. Derzeit können doppelte Artikel hinzugefügt werden. Ich möchte herausfinden, wie Sie prüfen können, ob bereits ausgewählte Objekte in Listbox2 vorhanden sind, und nur Objekte hinzufügen, die noch nicht vorhanden sind.Python 2.7: Hinzufügen neuer Elemente zu Tkinter Listbox ohne bestehende Werte hinzufügen

Hier ist mein Code:

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() 

In dem obigen Code die Funktion selectAdd() führt das Element Manipulation. Ich hatte gehofft, dies zu tun, indem ich eine andere for-Schleife innerhalb der Funktion hinzufüge, die die Werte in listbox2 zurückgibt, und Elemente hinzufüge, wenn nicht in listbox2. Allerdings kann ich scheinbar nur ausgewählte Werte mit .get zurückgeben, ich kann nicht herausfinden, wie alle Werte ausgewählt werden. Ich bin mir auch nicht sicher, ob dies überhaupt der beste Weg ist. Jede Hilfe würde sehr geschätzt werden!

Antwort

0

Wie wäre es nur alle Werte zur Zeit in der zweiten Listbox immer mit listbox2.get(0,END) und wenn es keine Duplikate sind fügen Sie die 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) 
+0

Okay, ich fühle mich jetzt dumm. Ich habe versucht, neue Listen zu erstellen und "nicht in" und ".app" zu verwenden. Ich habe nicht realisiert .get kann das tun. Vielen Dank, funktioniert wie ein Zauber. – JamesPy

Verwandte Themen