[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