[pygtk] TreeView and CellRendererCombo - MS Access-like form behaviour

John Finlay finlay at moeraki.com
Tue Apr 22 05:10:07 WST 2008


Stéphane Brunet wrote:
> John Finlay a écrit :
>> Stéphane Brunet wrote:
>>> Hi,
>>>
>>> btw, thank you John Finlay for the answer on my last question.
>>>
>>> In my quest of a GUI interfacing my small database application (I 
>>> did try OpenOffice Base and went mad after one hour :S ) I would 
>>> like to copy some behaviour of MS Access in my forms.
>>>
>>> Say I have two (SQL) tables with two fields and one relation between 
>>> the two:
>>>
>>> ----------------      ----------------
>>> |    Table1    |      |    Table2    |
>>> ----------------      ----------------
>>> | Field1 (int) |<---->| Field1 (int) |
>>> | Field2 (str) |      | Field2 (str) |
>>> ----------------      ----------------
>>>
>>> Now in my PyGTK form of Table1 (a TreeView), when I display the 
>>> Field1 in the first column, I would like to have a ComboBox which 
>>> displays the text associated to the integer value of Table2 (i.e. 
>>> Table2.Field2) rather than the value directly. However, I still want 
>>> it stored as an integer in Table1.Field1.
>>>
>>> How would you do this in an elegant manner ? Do I have to create my 
>>> own CellRenderer more generic than a CellRendererCombo ?
>> How do you want the db info displayed in the treeview? 
> I think of actually displaying the content of Table1 with Field1 in 
> the first column and Field2 in a second column. However, Field1 
> wouldn't be displayed as an integer but as a string coming from 
> Table2. In order to modify the content of Field1, I would like the 
> user to select a string (of Table2.Field2) in a CellRendererCombo 
> rather than an integer.
>
>> Are you planning on inserting the
>> table info into a liststore or generating it on the fly?
>>
> I thought of using two separate ListStore to store the content of each 
> table. I don't know if it is the best way but I want to alter the 
> information in the DB only when the user has finished his 
> modifications in the GUI.
>
To set the value displayed in the first column you could use 
set_cell_data_func and then set the text in the associated function 
using the table1 field1 value to select the table2 field2 value.

John


More information about the pygtk mailing list