[Tutor] Gtk - relational data display and edit

Knacktus knacktus at googlemail.com
Tue Apr 26 19:21:41 CEST 2011


Am 26.04.2011 17:34, schrieb bodsda at googlemail.com:
> Hi,
>
> I am reading in data from a csv file which will be in a format like this
>
> User1, attrib1, attrib2
> User2, attrib1, attrib2
> Etc.
>
> And need to display this in a window. My initial thought was to use gtk.Entry widgets because I will need to edit this data, but I don't think this will work as I will also need to read the data back, in relation to the user column, e.g I will have something like
>
> [Psuedocode]
> For I in entries:
>      A = usercolumn
>      B = attrib1column
>      C = attrib2column
>
>      Somefunction(A,B,C)
> [/psuedocode]
>
> I don't think I could use this method with entry boxes as I have no idea how many entries there will be (column length will be fixed) so I can't create the entry widgets beforehand
>

You could use a table widget. I'm sure GTK has something like that (I'm 
using Qt).

Otherwise, creating a "dynamic" widget for one set of your data is not 
as hard as it might sound. You need to keeping references to the 
composing widgets, for example in a dict. Here's some PyQt Pseudocode:


# You can retrieve the dictionary and the fieldnames with help of the
# csv module
att_name_to_value = {"User": "User1", "Att1": "attrib1", "Att1": "attrib1"}
fieldnames = ["User", "Att1", "Att2"]

att_name_to_line_edit = {}

# This is Qt specific
layout = QtGui.QGridLayout()

for row, fieldname in enumerate(fieldnames):
     label = QtGui.QLabel(fieldname)
     line_edit = QtGui.QLineEdit(att_name_to_value[fieldname]
     att_name_to_line_edit[fieldname] = line_edit
     # add the label to the first col
     layout.addWidget(label, row, 0)
     # add the line_edit to the second col
     layout.addWidget(line_edit, row, 1)

my_main_widget = QtGui.QWidget()
my_main_widget.setLayout(layout)


Now, if you need to read the changed data from the widget (triggered by 
a button_clicked event or what ever) you can call a function to read the 
data like this:


def read_data_from_widget(att_name_to_line_edit):
     for att_name, line_edit in att_name_to_line_edit.items():
         # do the conversion, e.g. PyQt
         new_text = str(line_edit.text())
         # do whatever you wish with the new data ...


HTH,

Jan




> Anyone have any suggestions?
>
> Thanks,
> Bodsda
> Sent from my BlackBerry® wireless device
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor



More information about the Tutor mailing list