Seite 1 von 1
Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 18:33
von beli3ver
Guten Abend.
Ich bin gerade ziemlich am verzweifeln und ich hoffe ich könnt mir weiter helfen.
Und zwar will ich ein TreeStore erstellen, wo in der ersten Spalte die Rechnungsnummer steht und in der zweiten das Rechnungsdatum.
Die beiden Spalten werden angezeigt, jedoch wird in beiden Spalten die Rechnungsnummer angezeigt, und ich kann mir nicht erklären warum.
Könnt ihr mir da vielleicht weiterhelfen?
Code: Alles auswählen
def __init__(self):
Gtk.Window.__init__(self, title="Invoicy")
self.set_border_width = 10
self.set_default_size(500, 400)
treestore = Gtk.TreeStore(str, str)
a = dbFiles.dbFiles()
invoices = a.getallinvocies()
for invoice in invoices:
treestore.append(None, [invoice['InvoiceNumber']], [invoice['Date']])
treeview = Gtk.TreeView(treestore)
renderer = Gtk.CellRendererText()
col_number = Gtk.TreeViewColumn('Number', renderer, text=0)
col_date = Gtk.TreeViewColumn('Date', renderer, text=0)
treeview.append_column(col_number)
treeview.append_column(col_date)
cell = Gtk.CellRendererText()
col_number.pack_start(cell, True)
self.add(treeview)
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 19:15
von __blackjack__
@beli3ver: Der `append()`-Aufruf sieht zumindest schon mal falsch aus. Du übergibst da drei Argumente, das sollten aber nur zwei sein.
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 19:29
von beli3ver
Wenn ich das 'None' entferne, bekomme ich folgenden Fehler
Code: Alles auswählen
TypeError: argument parent: Expected Gtk.TreeIter, but got list
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 19:33
von Sirius3
Naja, jetzt zu raten, welches Argument da nicht hingehört, führt Dich nicht zum Ziel. Hast Du schonmal in der Dokumentation gelesen?
Warum glaubst Du, was die Listen mit je einem Element bedeuten?
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 19:50
von beli3ver
Ja habe ich:
https://developer.gnome.org/pygtk/stabl ... re--append
Code: Alles auswählen
parent :
a gtk.TreeIter, or None
row :
a tuple or list containing ordered column values to be set in the new row
Ok es macht keinen Sinn, das 'None' zu entfernen
Habe mir jetzt mal die List mit print ausgeben lassen, dann sieht sie so aus:
Sie für mich ok aus, oder habe ich jetzt einen Denkfehler?
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 20:15
von __blackjack__
@beli3ver: Was Du Dir da jetzt ausgegeben hast ist aber nicht das was Du im Code weiter oben an `append()` übergeben hast.
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 20:18
von beli3ver
Doch.
gibt genau das aus.
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 20:31
von __blackjack__
@beli3ver: Nein.
Das ``print(…)`` gibt etwas anderes aus als Du beim `append()` übergeben hast. Beim `append()` hast Du *3* Argumente übergeben. Ziehen wir das `None` ab, sind es noch *2* Argumente. Bei dem `print()` hier übergibst Du aber nicht *2* Argumente, sondern nur *1* Argument. Und das wäre das richtige zweite Argument für `append()`. Da übergibst Du aber etwas anderes…
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 21:34
von beli3ver
Jetzt bin ich raus. Verstehe nur Bahnhof.
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Donnerstag 20. Juni 2019, 21:39
von Sirius3
Schau Dir Dein ›append‹ an, und vergleiche es mit Deinem ›print‹.
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Freitag 21. Juni 2019, 04:26
von beli3ver
Ok, jetzt habe ich es gesehen.
Vor lauter Klammern. Entsprechend so sieht es jetzt aus:
Code: Alles auswählen
for invoice in invoices:
print([invoice["InvoiceNumber"], invoice["Date"]])
treestore.append(None, [invoice['InvoiceNumber'], invoice['Date']])
Trotzdem bleibt es bei diesem Ergebnis:
Habe jetzt auch nochmal die Doku gewälzt und den Code noch aufgeräumt, aber immer noch das selber Ergebnis:
Code: Alles auswählen
treestore = Gtk.TreeStore(str, str)
a = dbFiles.dbFiles()
invoices = a.getallinvocies()
for invoice in invoices:
treestore.append(None, [invoice['InvoiceNumber'], invoice['Date']])
treeview = Gtk.TreeView(treestore)
renderer_number = Gtk.CellRendererText()
renderer_date = Gtk.CellRendererText()
col_number = Gtk.TreeViewColumn('Number', renderer_number, text=0)
col_date = Gtk.TreeViewColumn('Date', renderer_date, text=0)
treeview.append_column(col_number)
treeview.append_column(col_date)
self.add(treeview)
Hier auch nochmal die Klasse mit der ich die Daten hole:
Code: Alles auswählen
def getallinvocies(pathInvoicy):
userhome = str(Path.home())
with open(userhome + '/.config/com.github.beli3ver.invoicy/invoices.json', 'r') as f:
file = json.load(f)
return file
Und hier das .json file
Code: Alles auswählen
[
{
"InvoiceNumber": "R-151515",
"Date": "10-15-20"
},
{
"InvoiceNumber": "R-151516",
"Date": "11-15-20"
}
]
Re: Gtk.TreeStore / Zweite Spalte
Verfasst: Freitag 21. Juni 2019, 09:38
von Sirius3
Was erwartest Du, wenn Du jedem ›TreeViewColumn‹ sagst, dass es die erste Spalte anzeigen soll?
Warum benutzt Du `Path.home()` stückelst dann aber den Pfad per String + zusammen?
Dateinamenstrings sollten auch nicht irgendwo in einer Funktion stehen, sondern als Konstante am Anfang der Datei. Beim Öffnen sollte man immer ein Encoding angeben, oder da Du json-Daten liest, die Datei binär öffnen.
Der Variablenname ›file‹ hat so gar nichts mit seinem Inhalt zu tun.
Halt Dich an die Namenskonvention.
Code: Alles auswählen
INVOICE_FILENAME = Path.home() / '.config' / 'com.github.beli3ver.invoicy' / 'invoices.json'
def read_all_invoices(path_invoicy):
with open(INVOICE_FILENAME, 'rb') as f:
invoices = json.load(f)
return invoices