auf einem GTK3-Programm mit Python habe ich ein Protokoll implementiert. Dies ist ein TextView mit TextBuffer in einem ScrolledWindow. Mit einer Routine füge ich eine neue Zeile an dieses Protokoll an. Danach sollte es zur letzten Zeile scrollen.Scrolle zum Ende von ScrolledWindow/TextView
def append_log(self, line):
self.textbuffer.insert(self.textbuffer.get_end_iter(), "\n"+line, -1)
# scrolling down
Es sollte wie folgt aussehen: http://www.physik.tu-dresden.de/~s9472632/log_manual.png
Aber es funktioniert nicht. Ich habe den folgenden Code ausprobiert.
# nothing happens
adj = self.scrolledwindow.get_vadjustment()
adj.set_value(adj.get_upper()-adj.get_page_size()) # same without subtraction (only upper or page_size)
self.scrolledwindow.set_vadjustment(adj) # with and without this line
.
# nothing happens
self.textview.scroll_to_iter(self.textbuffer.get_end_iter(), 0.0, False, 0.5, 0.5)
.
# works a bit but scroll bars cover the text (see picture below)
self.textview.scroll_to_mark(self.textbuffer.get_insert(), 0.0, False, 0.5, 0.5)
Bild: http://www.physik.tu-dresden.de/~s9472632/log_scroll.png
Es scheint, die letzten vier Argumente von scroll_to * (within_margin, use_align, xalign, yalign) haben keinen Einfluss der Ergebnisse.
Wie funktioniert es?
Tschüss Markus
Stellen Sie sicher, dass Sie die Add-Methode für untergeordnete Benutzer mit systemeigenen Scroll-Funktionen verwenden. Dies ist "container_add" in C api. – ergosys