2017-02-03 26 views
0

私は単純な一括ファイルユーティリティを書いています。 GUIには2つのリストボックスがあります。 Listbox1には、ユーザーが選択したディレクトリのいずれかに存在するファイルのリストが含まれています。ユーザーは、listbox1の選択された項目をlistbox2に追加できます。現在、これにより、重複した項目を追加することができます。選択したアイテムが既にlistbox2に存在するかどうかをチェックし、まだ存在していないアイテムだけを追加する方法を理解したいと思います。ここPython 2.7:既存の値を追加せずにTkinterリストボックスに新しい項目を追加する

は私のコードである:上記のコードで

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を使って返すように見えるだけで、すべての値を選択する方法を理解することはできません。また、これが最善の方法であるとは私は確信していません。どんな助けでも大歓迎です!ただlistbox2.get(0,END)を有する第2リストボックスに、現在のすべての値を取得し、重複しない場合について

答えて

0

方法は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

オーケー、私は今、愚かな感じ。私は新しいリストを作成しようとしていましたが、これを行うには 'not in'と.appendを使用しました。私は気づいていませんでした。おかげさまで、魅力的な作品です。 – JamesPy

関連する問題