faqts : Computers : Programming : Languages : Python : Tkinter

+ Search
Add Entry AlertManage Folder Edit Entry Add page to http://del.icio.us/
Did You Find This Entry Useful?

8 of 8 people (100%) answered Yes
Recently 7 of 7 people (100%) answered Yes

Entry

Can anyone tell me how I would go about disabling a pmw combobox?

Jun 23rd, 2000 23:09
unknown unknown, Richard Chamberlain


In the ToDo list for Pmw disabling is mentioned so hopefully we'll have 
a solution from the source before long. In the meantime...

This is a bit of hack (in the derogatory sense of the word) but hey!

So you basically want to import the myComboBox class and create an 
instance just as you would with Pmw. I've added a couple of methods - 
disable and enable suprisingly enough.

Included below is some test code.

It works in the same way as you mentioned, by unbinding the events, and 
rebinding them to enable it.

Richard


from Tkinter import *
import Pmw
root = Tk()
root.title('Disabling ComboBox Hack')
Pmw.initialise()

class myComboBox(Pmw.ComboBox):
    def disable(self):
        # Rebind things to my empty handler
        self.component('arrowbutton').bind('<1>',self.handler)
        self.component('arrowbutton').bind('<3>',self.handler)
        self.component('arrowbutton').bind('<Shift-
3>',self.handler)
        self.component('entryfield_entry').configure
(state='disabled',fg='grey')

    def enable(self):
        # bind the events back up to the original methods
        self.component('arrowbutton').bind('<1>',self._postList)
        self.component('arrowbutton').bind('<3>',self._next)
        self.component('arrowbutton').bind('<Shift-3>',
self._previous)
        self.component('arrowbutton').configure(takefocus=1)
        self.component('entryfield_entry').configure
(state='normal',fg='black')

    def handler(self,event):
        # so it doesn't propagate the event
        return('break')

# Now test it

comboentries = ("Pmw Should", "have a nicer way", "to
disable", "a combo box")
theEnabler = Button(root, text='Enabled',padx=20, pady=10)
theEnabler.pack(expand=1, fill=BOTH, padx=8, pady=8)

combobox = myComboBox(root, label_text='Disabling Combobox:',
labelpos='wn',
                        listbox_width=24, dropdown=1,
                        scrolledlist_items=comboentries)
combobox.pack(fill=BOTH, expand=1, padx=8, pady=8)

combobox.selectitem(comboentries[0])

def disable(event):
    if theEnabler['text']=='Enabled':
        combobox.disable()
        theEnabler.configure(text='Disabled')
    else:
        combobox.enable()
        theEnabler.configure(text='Enabled')
theEnabler.bind('<Button-1>',disable)
root.mainloop()