0

リストボックスに項目を追加および削除しようとしていますが、次のエラーが発生します:

files = self.fileList()
TypeError: 'list' object is not callable

呼び出すことができない場合、どうすればこのリストにアクセスできますか? グローバル変数として使用しようとしましたが、間違って使用していた可能性があります。そのリストボックスから項目を取得し、ボタンが押されたときにそれらを別のリストボックスに追加できるようにしたいと考えています。

class Actions:

def openfile(self): #select a directory to view files
    directory = tkFileDialog.askdirectory(initialdir='.')
    self.directoryContents(directory)


def filename(self):
    Label (text='Please select a directory').pack(side=TOP,padx=10,pady=10)

files = []
fileListSorted = []
fileList = []

#display the contents of the directory
def directoryContents(self, directory): #displays two listBoxes containing items
    scrollbar = Scrollbar() #left scrollbar - display contents in directory
    scrollbar.pack(side = LEFT, fill = Y) 

    scrollbarSorted = Scrollbar() #right scrollbar - display sorted files 
    scrollbarSorted.pack(side = RIGHT, fill = Y)

    #files displayed in the left listBox
    global fileList
    fileList = Listbox(yscrollcommand = scrollbar.set) 
    for filename in os.listdir(directory):
        fileList.insert(END, filename)
    fileList.pack(side =LEFT, fill = BOTH)
    scrollbar.config(command = fileList.yview)


    global fileListSorted #this is for the filelist in the right window. contains the values the user has selected
    fileListSorted = Listbox(yscrollcommand = scrollbarSorted.set) #second listbox (button will send selected files to this window)
    fileListSorted.pack(side=RIGHT, fill = BOTH)
    scrollbarSorted.config(command = fileListSorted.yview)

    selection = fileList.curselection() #select the file
    b = Button(text="->", command=lambda:self.moveFile(fileList.curselection()))#send the file to moveFile to be added to fileListSorted
    b.pack(pady=5, padx =20)


def moveFile(self,File):
    files = self.fileList()
    insertValue = int(File[0]) #convert the item to integer
    insertName = self.fileList[insertValue] #get the name of the file to be inserted
    fileListSorted.insert(END,str(insertName)) #insertthe value to the fileList array

ファイルを次のように変更して、ファイルが正しく設定されているかどうかを確認し、空の配列を返しました

files = self.fileList
print files
#prints []
4

1 に答える 1

1

初期化することはありませんself.fileList(またはfileListSorted)。記入するとdirectoryContents

global fileList
fileList = Listbox(yscrollcommand = scrollbar.set)
...

というグローバル変数で作業しますfileList。どこでも使用できます(または、すべての関数をself.fileList追加して、 を使用します)。global fileListfileList

ただし、クラスの使用には懐疑的です。オブジェクト指向の概念と Python での実装を理解しようとするか、これらの概念を当面無視する必要があります。


編集

コードを実行しようとしましたが、行を変更することもできます

insertName = self.fileList[insertValue]

insertName = self.fileList.get(insertValue)

fileListia ウィジェットとすべての Tkinter ウィジェットは、プロパティに辞書表記法 ( などself.fileList['background']) を使用します。

get は数値または数値を含む文字列のいずれかを取るため、上記の行での変換は役に立たないことに注意してください。を介してリスト全体を取得できることにも注意してくださいget(0,END)

于 2012-10-24T18:37:48.500 に答える