ich habe mittels glade eine xml GUI erstellt (einfach nur eine Combobox, ein filechooser, einem liststore und einem Button.
Jetzt versuche ich verzweifelt die Combobox per Code mit Daten zu füllen ... was mir auch irgendwie gelungen ist ... ich es aber trotzdem noch nicht richtig verstanden habe.
Das Liststore "liststore2" hat eine Spalte vom Type gchararray. Wenn ich jetzt versuche eine Zeile mittels self.builder.get_object('liststore2').append('MK') anzufügen, erhalte ich immer die Meldung, das die Spalte nicht groß genug ist ... wenn ich hingegen z.B. eine neue Zeile mit nur einem Zeichen erzeuge (self.builder.get_object('liststore2').append('M')) funzt es.
Ich habe jetzt nach langem Probiere herausgefunden, dass ich Zeilen mit "combobox.append_text("MK1")" erzeugen kann ... aber warum muss ich die Instant der Combobox nutzen? Ich würde die Zeilen lieber im Liststore erzeugen.
Sorry ... ich bin nicht so der Python Experte... ich komme mehr aus der Microsoft VB.NET / VB / C# /ASPX Richtung.
Zur Info:
Der gezeigte Code ist nur ein kleiner Prototype zum Testen (Tool zum flashen eines Atmel Mikrocontrollers mittels avrdude) ... also bitte nicht so sehr über den Style meckern ...
Code: Alles auswählen
#!/usr/bin/python
import gtk
import gtk.glade
import os
def addCellRenderer (control, colNr=0, renderer=None, attr='text'):
if renderer is None:
renderer = gtk.CellRendererText()
control.pack_start(renderer, True)
control.add_attribute(renderer, attr, colNr)
class myApp(object):
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file("dialogs/main.glade")
self.builder.connect_signals(self)
self.frmmain = self.builder.get_object("frmmain")
self.frmmain.show()
#self.builder.get_object('liststore2').append('MK')
#self.builder.get_object('liststore2').append('B')
combobox = self.builder.get_object('cboprogrammer')
addCellRenderer(combobox)
combobox.append_text("MK1")
def run(self):
gtk.main()
def addCellRenderer (control, colNr=0, renderer=None, attr='text'):
if renderer is None:
renderer = gtk.CellRendererText()
control.pack_start(renderer, True)
control.add_attribute(renderer, attr, col_no)
def on_cmdFlash_clicked(self, *args):
print ("Start flash ...")
print (self.builder.get_object('filechooserbutton1').get_filename())
result = os.popen("avrdude -p m8")
out = [zeile.strip() for zeile in result]
print(out)
def on_frmmain_delete_event(self, *args):
print("bye")
gtk.main_quit()
if __name__ == "__main__":
app = myApp()
app.run()