[pygtk] ComboBox Behavior - End User Perspective

Kurt Symanzik kurt at kbsymanzik.org
Wed Mar 21 18:42:21 WST 2007


Preben Randhol wrote:
> On Wed, 21 Mar 2007 16:05:36 +0800
> Kurt Symanzik <kurt at kbsymanzik.org> wrote:
> 
>> I have a ComboBox that has no active rows when the application starts 
>> which is accomplished with the set_active(-1) call in the init()
>> method. I have found that the user may select any row easy enough,
>> but it is baffling me how to get the ComboBox to allow the *end user*
>> to select no active row again.  In other words, after making a
>> selection, I want to enable the user to choose "nothing" again
>> leaving a blank ComboBox as when the application started.  I know
>> that I could add a button that the user could press that I could use
>> to set_active(-1) on the ComboBox, but that seems like a hack to me.
> 
> Why don't you in stead have one row in the combobox which is the empty
> row? Say Row 1, so the user can choose this. Simple and easy to do.

I agree that that is an easy and clean solution in the simple scenario, 
and maybe in my case too (I'll let you judge).  In my code the 
underlying base model supplies the data to a TreeView and this ComboBox. 
  There is a TreeModelFilter chained together that allows the ComboBox 
to display unique values of a particular column in the base model.  I am 
using the ComboBox to give the user the option of filtering out what 
gets displayed in the TreeView.  When the ComboBox is empty, then all 
rows are displayed in the TreeView.  When the ComboBox contains a 
selection, then only those rows that match that column in the model are 
displayed in the TreeView.  Thus, the need for the user to select 
"nothing" in the ComboBox in order to have the TreeView display all rows 
again.

My main concern at this point is that I am correctly understanding the 
ComboBox and associated widgets.  Is the empty row solution the best, or 
am I missing something else, or misunderstanding ComboBox, etc.  It just 
surprised me that the user could start with no row selected but never 
get back to that original state.  In other words, at one point the 
ComboBox truly does display nothing and have nothing selected even 
without an empty row in the underlying model.  I would think that that 
state could be reacquired by the user without having to "taint" the model.

Yet, if there is no other way, I could put an empty row in the 
underlying model and then just hide it from the TreeView with a 
TreeModelFilter (I am already using one anyway).  If this is the 
cleanest and best solution, then that will work.

Thanks for your input.

Kurt

-- 
Kurt Symanzik
kurt at kbsymanzik.org
Skype id: ksymanzik
http://kbsymanzik.org


More information about the pygtk mailing list