Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

tkinter listbox get(ACTIVE) method

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

  1. I selected the item "one", it printed out "one"
  2. I selected the item "two", it print out "one" again
  3. 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?

like image 672
Chris Aung Avatar asked Mar 28 '13 01:03

Chris Aung


People also ask

How to get selected items from Listbox in tkinter?

The curselection method on listbox returns a tuple containing the indices/line numbers of the selected item(s) of the listbox, starting from 0. The selected_item function that we made, traverses the tuple returned by the curselection method and prints the corresponding item of the listbox using the indices.

Which method is used to select a value from Listbox?

To select an item in a ListBox, we can use the SetSelect method that takes an item index and a true or false value where the true value represents the item to be selected.

What is Curselection in Python?

Python tkinter Listbox curselection is used to display the selected item(s). curselection is a predefined function that fetches the value(s) of a selected item or items.


2 Answers

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.

like image 80
abarnert Avatar answered Oct 05 '22 13:10

abarnert


This seems to work for me:

mylistbox.get(ANCHOR) 

Based on your code, it will print out the current item.

like image 29
Himel Das Avatar answered Oct 05 '22 12:10

Himel Das