Display file names in Tkinter Listbox
sit at home.com
sit at home.com
Thu May 20 11:58:51 EDT 2010
On Thu, 20 May 2010 15:36:59 +1000, John McMonagle
<jmcmonagle at NO.SPAM.velseis.com.au> wrote:
>Rick at home.com wrote:
>> Hello,
>>
>> My first attenpt at a simple python Tkinter application. I wanted to
>> see how to load file names into a listbox from a menu. This is what I
>> got until the part of displaying the file names in a listbox, which I
>> could not figfure out how to do?
>>
>> Any help would be appreciated. Trying to do this as simple as possible
>> to understand.
>>
>> The "print fileNames" does work but how to display it in listbox?
>>
>> from Tkinter import *
>> from tkFileDialog import askopenfilenames
>>
>> class MyCode:
>> def __init__(self):
>> root = Tk()
>>
>> menubar = Menu(root)
>> filemenu = Menu(menubar)
>>
>> lbox = Listbox(root, width=50).pack()
>
>Your problem is the above line of code.
>
>Here you are assigning the return value of the pack (None if I recall).
>
>Later when you want to put things in the Listbox you don't have the
>widget reference anymore.
>
>It's probably a good idea to make the Listbox widget an attribute of
>your class so you can use it in class methods without having to pass it
>as an argument.
>
>So, change the above line of code to:
>
> self.lbox = Listbox(root, width=50)
> self.lbox.pack()
>
>>
>> menubar.add_cascade(label='File', menu=filemenu)
>> filemenu.add_command(label='New Project')
>> filemenu.add_command(label='Load Files...', command=self.OnLoad)
>>
>>
>> filemenu.add_command(label='Exit', command=root.quit)
>>
>> root.config(menu=menubar)
>>
>> root.mainloop()
>>
>>
>> def OnLoad(self):
>> fileNames = askopenfilenames(filetypes=[('Split Files', '*')])
>> print fileNames
>>
>
>Now that you've got a reference to your Listbox widget that is an
>attribute of your class, you should be able to insert the file names
>into the Listbox like so.
>
> self.lbox.insert(0, fileNames)
>
>Regards,
>
>John
Thank you John for your reply.
I have made the modifications and it does print inside the listbox,
however they are all printed on the same line.
My files are named Name.0 Name.1 Name.2 Name.3 etc so I would like
them to be printed sorted on a separate line. When I did a
type(fileNames) it showed me that it was in unicode and printed
character per line, so I tried it this way
listFileNames = str(fileNames).split(' ')
for fileName in listFileNames:
self.lbox.insert(0, fileName)
it works but does not print sorted.
it prints
name.2
name.1
name.0
name.3
Thank you for all your help.
More information about the Python-list
mailing list