Treeview zur letzten Reihe springen und diese Anzeigen
Verfasst: Montag 12. August 2019, 17:11
Liebe Community, liebe Pythoner und Tkinter-Experten,
ich versuche schon stundenlang mit dem Treeview klar zu kommen bzw. mit der für mich unverständlichen Situation, dass Tkinter den "Viewport" nicht automatisch auf das zuletzt eingefügte Element (bzw. die Reihe) setzt.
Ich habe eine Datenbank (sqlite), wo nach einer Artikelnummer gesucht werden kann. Wird diese gefunden, wird das Ergebnis in eine Tabelle geschrieben (mit Tkinter ist hier wohl nur der Treeview eine sinnvolle, geordnete Option).
Das Programm funktioniert tadellos und ich kann alle Daten in das Tkinter-Widget schreiben. Allerdings stehe ich vor dem Problem, dass die Reihen nicht mehr angezeigt werden, wenn es mehr Reihen sind, als für das Widget vorgesehen sind (in meinem Fall 6). Der siebte Eintrag usw. läuft dann außerhalb der sichtbaren Einträge - ist aber natürlich vorhanden und man kann ihn durch die Tastatur ansteuern. Das möchte ich aber "automatisch" erledigen.
Gefunden habe ich hierzu die Befehle yview_moveto(1.0), yview(Element) oder auch see(). Das funktioniert auch - fast. Es klappt nämlich nur bei jedem zweiten Aufruf. Die Zeile 7 wird nicht automatisch angezeigt, bei Zeile 8 klappt es dann (es werden beide neuen Einträge dargestellt). Zeile 9 dann wieder nicht, bei Zeile 10 klappt es.
Ich finde hierfür einfach keine Lösung und kann es mir nicht erklären.
Hier ein Auszug aus dem Programm (gekürzt):
Gibt es jemanden, der dieses "Problem" kennt und mir helfen kann? Weder googlen, Tutorials noch die Forensuche hat mir bisher die Augen öffnen können.
Danke!
ich versuche schon stundenlang mit dem Treeview klar zu kommen bzw. mit der für mich unverständlichen Situation, dass Tkinter den "Viewport" nicht automatisch auf das zuletzt eingefügte Element (bzw. die Reihe) setzt.
Ich habe eine Datenbank (sqlite), wo nach einer Artikelnummer gesucht werden kann. Wird diese gefunden, wird das Ergebnis in eine Tabelle geschrieben (mit Tkinter ist hier wohl nur der Treeview eine sinnvolle, geordnete Option).
Das Programm funktioniert tadellos und ich kann alle Daten in das Tkinter-Widget schreiben. Allerdings stehe ich vor dem Problem, dass die Reihen nicht mehr angezeigt werden, wenn es mehr Reihen sind, als für das Widget vorgesehen sind (in meinem Fall 6). Der siebte Eintrag usw. läuft dann außerhalb der sichtbaren Einträge - ist aber natürlich vorhanden und man kann ihn durch die Tastatur ansteuern. Das möchte ich aber "automatisch" erledigen.
Gefunden habe ich hierzu die Befehle yview_moveto(1.0), yview(Element) oder auch see(). Das funktioniert auch - fast. Es klappt nämlich nur bei jedem zweiten Aufruf. Die Zeile 7 wird nicht automatisch angezeigt, bei Zeile 8 klappt es dann (es werden beide neuen Einträge dargestellt). Zeile 9 dann wieder nicht, bei Zeile 10 klappt es.
Ich finde hierfür einfach keine Lösung und kann es mir nicht erklären.
Hier ein Auszug aus dem Programm (gekürzt):
Code: Alles auswählen
def onReturn(*event):
iid=tree.insert("","end",text=str(nummer+1),
values=(result[2],result[3]))
nummer += 1
tree.selection_set(iid)
#tree.yview_moveto(1.0)
tree.yview(nummer)
# Treeview
tree=ttk.Treeview(root,height=6)
tree["columns"]=("Artikel","Preis")
tree.column("#0", width=50, stretch=NO)
tree.column("Artikel",width=200, stretch=NO)
tree.column("Preis", width=50, stretch=NO)
tree.heading("#0", text="Pos")
tree.heading("Artikel",text="Artikel")
tree.heading("Preis", text="Preis")
tree.pack()
Danke!