Disabling Comboboxes
kapil2000 at my-deja.com
kapil2000 at my-deja.com
Fri Jun 23 15:02:12 EDT 2000
Hey,
It worked great. I basically had the same thing, except I messed up
some bindings...=P
Thanks!!
Kapil
In article <16ef54c0.7dd47049 at usw-ex0105-035.remarq.com>,
Richard Chamberlain <richard_chamberlainNOriSPAM at ntlworld.com.invalid>
wrote:
> Hi Kapil,
>
> 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()
>
> Got questions? Get answers over the phone at Keen.com.
> Up to 100 minutes free!
> http://www.keen.com
>
>
Sent via Deja.com http://www.deja.com/
Before you buy.
More information about the Python-list
mailing list