Pmw.ScrolledListbox

Era Akost era_akost at yahoo.de
Thu Nov 15 18:29:02 CET 2001


Martin Franklin <martin.franklin at westgeo.com> wrote in message news:<9t04c2$53ra$1 at mail1.wg.waii.com>...

> Era,
> 
> Could you post some code I can't see this with the following code....
> 
> >>> from Tkinter import *
> >>> import Pmw
> >>> root=Tk()
> >>> lb=Pmw.ScrolledListBox(root)
> >>> lb.pack()
> >>> lb.insert(0, 'one')
> >>> lb.insert(0, 'two')
> >>> lb.insert(0, 'three')
> 
> Oh and what platform/version etc....
> 
> Martin

Hi Martin, 

you're wright. This code doesn't show what I was talking about. I
tried myself several from these simple examples and no one show an
underlined item selection. In fact, my code is a little more
complicated. I will paste it at the end of the message.

I create a class SelectionWindow - which has a Pmw.SelectionDialog
(one of which components is Scrolledlist). I need this class because
in my application I'll be calling several times the SelectionDialog,
with different items.
To show how it is called in my application, I wrote a simple class
Demo.

Making some tests now, it seems that the problem is connected to the
functions
withdraw(), activate(). I have no idea why.

I'm using Python 2.0 on Windows NT.

Here is the code. It runs.
######################################

from Tkinter import *
import Pmw

class SelectionWindow:
    def __init__(self, parent, data = ()):
        self.data = data
        self.dialog = Pmw.SelectionDialog(parent,
                             title = 'Selection Window',
                             buttons = ('Accept Selection', \
                                        'Undo Selection'),
                             defaultbutton = 'Accept Selection',
                             scrolledlist_labelpos = 'nw',
                             label_text = "Make your selection",
                             scrolledlist_items = self.data,
                             command = self.selected)
        
        self.dialog.withdraw()

    def activate(self, data = ()):
        if data:
            self.data = data
        self.dialog.setlist(self.data)
        self.dialog.activate()
        return self.dialog.getcurselection()

    def selected(self, result):
        if result == 'Accept Selection':
            self.dialog.deactivate()
        else:
            self.dialog.selection_clear()

data = ('January', 'February', 'Mars', 'April', 'May', 'June')


class Demo:
    def __init__(self, parent):
        self.var = StringVar()
        Button(parent, text = 'Select Fields',
               command = self.call_sw).pack(padx = 10,
                                            pady = 10, side = LEFT)
        Label(parent, textvariable = self.var,
              width = 10).pack(padx = 10, pady = 10, side = RIGHT)
        self.sw = SelectionWindow(parent)
        #uncomment last line,
        #while commenting self.dialog.withdraw() above
        #self.sw = SelectionWindow(parent, data)    

    def call_sw(self):
        selection = self.sw.activate(data)[0]   #result is a tuple
        self.var.set(selection) #set the value to the lable text

if __name__ == '__main__':
    root = Tk()
    root.title('Demo Test')
    d = Demo(root)
    root.mainloop()



More information about the Python-list mailing list