By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,750 Members | 1,456 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,750 IT Pros & Developers. It's quick & easy.

Tk Listbox - Selected Item ?

P: n/a
I am having trouble understanding the methods for the Listbox from Tk.

If I was to select at item in the list using a mouse click (have already
created the bind event) - what method returns the text of the selected
item ?

Pete

Jul 18 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
Peter Moscatt wrote:
I am having trouble understanding the methods for the Listbox from Tk.

If I was to select at item in the list using a mouse click (have already
created the bind event) - what method returns the text of the selected
item ?

Pete

Pete,

pydoc Tkinter.Listbox

<snip>

| curselection(self)
| Return list of indices of currently selected item.
|
| delete(self, first, last=None)
| Delete items from FIRST to LAST (not included).
|
| get(self, first, last=None)
| Get list of items from FIRST to LAST (not included).

So to get the value of the selected item:

lb.get(lb.curselection()[0])
provided the listbox is in single selection mode or only one item is
selected

Martin
Jul 18 '05 #2

P: n/a
Martin Franklin wrote:
Peter Moscatt wrote:
I am having trouble understanding the methods for the Listbox from Tk.

If I was to select at item in the list using a mouse click (have already
created the bind event) - what method returns the text of the selected
item ?

Pete
Pete,

pydoc Tkinter.Listbox

<snip>

| curselection(self)
| Return list of indices of currently selected item.
|
| delete(self, first, last=None)
| Delete items from FIRST to LAST (not included).
|
| get(self, first, last=None)
| Get list of items from FIRST to LAST (not included).

So to get the value of the selected item:

lb.get(lb.curselection()[0])
provided the listbox is in single selection mode or only one item is
selected

Martin


Thanks Martin,

I used the:
lb.get(lb.curselection()[0])

ant this works to a point. When I select the item in the listbox the system
generates an error:

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.3/lib-tk/Tkinter.py", line 1345, in __call__
return self.func(*args)
File "/home/linux/programming/dxcluster/servers.py", line 37, in sel
items = self.listbox.get(self.listbox.curselection()[0])
IndexError: tuple index out of range
Then if I select a second time directly after the error message I get my
desired result.

Am I to you the code you quoted in your original message:
| curselection(self)
| Return list of indices of currently selected item.
|
| delete(self, first, last=None)
| Delete items from FIRST to LAST (not included).
|
| get(self, first, last=None)
| Get list of items from FIRST to LAST (not included).


Pete

Jul 19 '05 #3

P: n/a
Peter Moscatt wrote:
Martin Franklin wrote:

Peter Moscatt wrote:
I am having trouble understanding the methods for the Listbox from Tk.

If I was to select at item in the list using a mouse click (have already
created the bind event) - what method returns the text of the selected
item ?

Pete

Pete,

pydoc Tkinter.Listbox

<snip>

| curselection(self)
| Return list of indices of currently selected item.
|
| delete(self, first, last=None)
| Delete items from FIRST to LAST (not included).
|
| get(self, first, last=None)
| Get list of items from FIRST to LAST (not included).

So to get the value of the selected item:

lb.get(lb.curselection()[0])
provided the listbox is in single selection mode or only one item is
selected

Martin

Thanks Martin,

I used the:
lb.get(lb.curselection()[0])

ant this works to a point. When I select the item in the listbox the system
generates an error:

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.3/lib-tk/Tkinter.py", line 1345, in __call__
return self.func(*args)
File "/home/linux/programming/dxcluster/servers.py", line 37, in sel
items = self.listbox.get(self.listbox.curselection()[0])
IndexError: tuple index out of range
Then if I select a second time directly after the error message I get my
desired result.


Pete,

Sounds like you are using the wrong kind of bind event. That is the
first time you select an item the callback for the bind command is
called *before* the selection is made. Can you post the code you have
showing the bind method and callback?

This code shows three different bind methods, the first produces the
same exception that you got...
from Tkinter import *
root = Tk()
lb = Listbox(root)
lb.insert(0, "one")
lb.insert(0, "two")
lb.insert(0, "three")
lb.pack()

def callback(*event):
print lb.get(lb.curselection()[0])

## BAD
#~ lb.bind("<1>", callback)

## OK
#~ lb.bind("<ButtonRelease-1>", callback)

## Best
lb.bind("<<ListboxSelect>>", callback)

root.mainloop()
The <<ListboxSelect>> is a virtual event I think quick google would tell
you more and the Tk man pages (online) have a complete explanation...

http://www.tcl.tk/man/tcl8.4/TkCmd/listbox.htm
http://www.tcl.tk/man/tcl8.4/TkCmd/listbox.htm#M60
Cheers,
Martin.

Jul 19 '05 #4

P: n/a
Martin Franklin wrote:
Peter Moscatt wrote:
Martin Franklin wrote:

Peter Moscatt wrote:

I am having trouble understanding the methods for the Listbox from Tk.

If I was to select at item in the list using a mouse click (have already
created the bind event) - what method returns the text of the selected
item ?

Pete

Pete,

pydoc Tkinter.Listbox

<snip>

| curselection(self)
| Return list of indices of currently selected item.
|
| delete(self, first, last=None)
| Delete items from FIRST to LAST (not included).
|
| get(self, first, last=None)
| Get list of items from FIRST to LAST (not included).

So to get the value of the selected item:

lb.get(lb.curselection()[0])
provided the listbox is in single selection mode or only one item is
selected

Martin

Thanks Martin,

I used the:
lb.get(lb.curselection()[0])

ant this works to a point. When I select the item in the listbox the
system generates an error:

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.3/lib-tk/Tkinter.py", line 1345, in __call__
return self.func(*args)
File "/home/linux/programming/dxcluster/servers.py", line 37, in sel
items = self.listbox.get(self.listbox.curselection()[0])
IndexError: tuple index out of range
Then if I select a second time directly after the error message I get my
desired result.


Pete,

Sounds like you are using the wrong kind of bind event. That is the
first time you select an item the callback for the bind command is
called *before* the selection is made. Can you post the code you have
showing the bind method and callback?

This code shows three different bind methods, the first produces the
same exception that you got...
from Tkinter import *
root = Tk()
lb = Listbox(root)
lb.insert(0, "one")
lb.insert(0, "two")
lb.insert(0, "three")
lb.pack()

def callback(*event):
print lb.get(lb.curselection()[0])

## BAD
#~ lb.bind("<1>", callback)

## OK
#~ lb.bind("<ButtonRelease-1>", callback)

## Best
lb.bind("<<ListboxSelect>>", callback)

root.mainloop()
The <<ListboxSelect>> is a virtual event I think quick google would tell
you more and the Tk man pages (online) have a complete explanation...

http://www.tcl.tk/man/tcl8.4/TkCmd/listbox.htm
http://www.tcl.tk/man/tcl8.4/TkCmd/listbox.htm#M60
Cheers,
Martin.


Thanks Martin,

You're a legend !!!!!

I fixed the bind and used lb.bind("<<ListboxSelect>>", callback) and away it
went.

Thanks heaps for the help.

Pete

Jul 19 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.