tkinter listbox get(ACTIVE) method

python, tkinter, widget

Solution

An item becomes active after you click on it—which means after your `ListboxSelect` method returns. So, you're printing out whatever was active before this click (meaning, generally, what you clicked last time).

Also, given that you refer to "selected" numerous times, I think what you want is the selected value(s), not the active one, so you should be asking for that.

For a listbox with `selectmode=SINGLE` or `BROWSE` (the default, what you have) listbox, you can fix both of these trivially. Just change this:

mylistbox.get(ACTIVE)

to:

mylistbox.get(mylistbox.curselection())

If you need to handle `MULTIPLE` or `EXTENDED`, then of course there are anywhere from 0 to 7 selections instead of exactly 1, so you need to do something like:

values = [mylistbox.get(idx) for idx in mylistbox.curselection()]
print ', '.join(values)

While we're at it, I'm not sure why you were doing `str((mylistbox.get(ACTIVE)))`, or even `str(mylistbox.get(ACTIVE))`. The result of `mylistbox.get` with a single index is going to be a string, the same one you inserted.

Problem

I was trying to make the currently selected `Listbox` item to be printed out. For example, when I select item "one", it should print out "one" and when I select item "two", it should print out "two" etc. The following is what I have tried. ``` from Tkinter import* root=Tk() sizex = 600 sizey = 400 posx = 40 posy = 20 root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy)) itemsforlistbox=['one','two','three','four','five','six','seven'] def CurSelet(evt): value=str((mylistbox.get(ACTIVE))) print value mylistbox=Listbox(root,width=60,height=10,font=('times',13)) mylistbox.bind('<<ListboxSelect>>',CurSelet) mylistbox.place(x=32,y=90) for items in itemsforlistbox: mylistbox.insert(END,items) root.mainloop() ``` My problem is whenever I selected an item in the listbox, it is actually printing out the previously selected item.For example, the moment I select the item "two" in the list, it is printing out "one". To make things more clear,please see the following - I selected the item "one", it printed out "one" - I selected the item "two", it print out "one" again - I selected the item "three", it print out "two" and so on... Am I missing something? or did I misunderstand the way the `get(ACTIVE)` works?

Original source