[Tutor] Binding the mouse to a list using Tk.
andy surany
mongo57a@comcast.net
Tue, 15 Oct 2002 13:08:03 -0400
Ok, this got me a lot closer! But I'm still slightly off. Thanks for the
example Dylan. I stayed with Tk instead of Pmw based on the amount of code
already developed - and because the functions tended to work the same way.
But I used the "example" logic.
So now I am using:
label = list(self.listbox.curselection())
and it looks pretty good! Except: label is the previous selection - not the
current. I am always behind by 1 (previous selection is item 2 from the
list, current is item 4, label="2").
Here are the 2 methods. As I indicated, "label" is always one behind the
current position; however, label1 is correct.
def handleList(self, event):
label=list(self.listbox.curselection())
print "label is ", label
def makeWidgets(self, options):
sbar = Scrollbar(self)
list = Listbox(self, relief=SUNKEN, selectmode=EXTENDED)
sbar.config(command=list.yview) # xlink sbar and
list
list.config(yscrollcommand=sbar.set) # move one moves
other
sbar.pack(side=RIGHT, fill=Y) # pack first=clip
last
list.pack(side=LEFT, expand=YES, fill=BOTH) # list clipped
first
pos = 0
for label in options:
list.insert(pos, label)
pos = pos+1
list.bind('<Button-1>', self.handleList) # set event
handler
self.listbox = list
label1=self.listbox.get(ACTIVE)
print 'info=',label1
-----Original Message-----
From: BELSEY, Dylan <dylan.belsey@baesystems.com>
To: 'andy surany' <mongo57a@comcast.net>; tutor@python.org
<tutor@python.org>
Date: Tuesday, October 15, 2002 12:47 AM
Subject: RE: [Tutor] Binding the mouse to a list using Tk.
>Hi Andy,
> In the interest of code sharing, I have attached a file which I
>believe contains some of the operations that you are looking to perform.
It
>is a cut down version of a class I wrote for the current system I am
working
>on. In its original form it obtains signals from a data server and
displays
>them ready for selection. The user then selects signals from the left-hand
>box, presses the appropriate button ('->') and the signal appears in the
>selected signals box, on the right hand side. This window was to aid the
>user in selecting specific signals for monitoring. I have kept the
relevant
>functionality in the file.
> I am currently running this under WinNT. I have also made the file
>self running, so all you have to do is get a DOS prompt in the directory
>where you have saved it and then type "example.py" or "python example.py".
> Two windows will appear. Just ignore the first one (but don't close
>it until you are finished), for this exercise. It is the root window,
which
>is important/necessary, but I have chosen not to use it here.
> So anyway, run it and experiment with it and then take a look at the
>code, from which I hope you can get some ideas and help.
> If you have any questions, please feel free to ask.
>
> HTH,
> Dylan
>
>
>PS: By the ways Tutors, if you see any glaring deficiencies, problems, etc.
>in the code pls. feel free to comment. However, I'm not too interested in
a
>code review at this point in time :)
>
>
>
>
>-----Original Message-----
>From: andy surany [mailto:mongo57a@comcast.net]
>Sent: Tuesday, 15 October 2002 13:50
>To: BELSEY, Dylan; tutor@python.org
>Subject: Re: [Tutor] Binding the mouse to a list using Tk.
>
>
>Thanks Dylan. I am using the listbox methods. And everything works. If I
put
>the list.bind in the same method that calls the scrolled list, I even get a
>response when I move the cursor to list selection
(listbox.cursorselection).
>The problem is that I need the selected list item to be independent of the
>mouse (mouse is depressing a button which gets the original highlighted
list
>item). It's almost like I'm losing context.
>
>I haven't looked at getcurselection - which I will do now. I still think
>that my logic is correct - but I haven't placed it in the correct spot.
>
>Regards,
>
>Andy
>-----Original Message-----
>From: BELSEY, Dylan <dylan.belsey@baesystems.com>
>To: tutor@python.org <tutor@python.org>
>Date: Monday, October 14, 2002 6:59 PM
>Subject: RE: [Tutor] Binding the mouse to a list using Tk.
>
>
>> Only had a brief look at your problem, but I believe that the Tkinter
>>widgets Listbox and ScrolledListBox may be what you need (and save you
>quite
>>a bit of time). You can use the Listbox methods from within the
>>ScrolledListbox object as well. You could then possibly associate a
>>function with your button which gets the currently selected item.
>>getcurselection() returns the text while the curselection() will return
the
>>index.
>> A lot of this is quite similar to what your code has proposed but
using
>>the built-in widgets and their functions may shed some light on an easier
>>solution.
>>
>> HTH,
>> Dylan
>>
>>
>>-----Original Message-----
>>From: andy surany [mailto:mongo57a@comcast.net]
>>Sent: Tuesday, 15 October 2002 04:20
>>To: tutor@python.org
>>Subject: [Tutor] Binding the mouse to a list using Tk.
>>
>>
>>Hi all!
>>
>>What I want to do is use a button to capture the position/value of the
>>
>>selected item in a scrolled list. So the user selects the item in the list
>>
>>with a single click of the left mouse button and then clicks a button.
>>
>>Should be easy - I'm just not getting it......
>>
>>
>>
>>I'm using Tkinter. I Created a class (ScrolledList) for a scrolled list
>>which works fine. Created
>>
>>another class (aaaaa) which populates the list - and it works fine.
Created
>>
>>a handler under ScrolledList (handleList) which should trap the results of
>>
>>the bind (makeWidgets). Right now, all I'm trying to do is just print out
>>
>>the value (just testing..) - but my logic is incorrect (actually, I think
>>
>>that the logic may be correct - it's just in the wrong place...).
>>
>>Here is a synopsis of the code. The "...." is non-relevant code which I
>have
>>removed for simplification.
>>
>>
>>
>>class ScrolledList(Frame):
>>
>> def __init__(self, options, parent=None):
>>
>> ........
>>
>> self.makeWidgets(options)
>>
>> def handleList(self, event):
>>
>> index = self.listbox.curselection()
>>
>> label = self.listbox.get(index)
>>
>> print "label is ", label
>>
>> def makeWidgets(self, options):
>>
>> ........
>>
>> list.bind('<Button-1>', self.handleList)
>>
>>Class aaaaa
>>
>> def update_strategy_code(self):
>>
>> ..........
>>
>> ScrolledList(options)
>>
>> Button(self, text='Update',
>>
>> command=self.edit_strategy_code).pack(side=LEFT)
>>
>> def edit_strategy_code(self):
>>
>> label=self.listbox.get(ACTIVE)
>>
>> print 'info2=',label
>>
>> TIA!
>>
>>Andy (mongo57a@comcast.net)
>>
>>
>>_______________________________________________
>>Tutor maillist - Tutor@python.org
>>http://mail.python.org/mailman/listinfo/tutor
>
>