2011-03-07 33 views
17

Çalışma sırasında doldurulan bir ScrolledWindow içinde bir ağaç görünümü widget'ım var. ScrolledWindow'un listenin sonuna otomatik olarak kaydırılmasını istiyorum. Sorunu çözdüm, ScrolledWindow'un vadjustment ayarını, ağaç görünümünde her satır eklendiğinde. örneğin: i interaktif ipython oturumda kod çalıştırmasına ve başıma değerini ayarlarsanızBir gtk.scrolledwindow nasıl otomatik olarak kaydırılır?

if new_line_in_row: 
    adj = self.scrolled_window.get_vadjustment() 
    adj.set_value(adj.upper - adj.page_size) 

, her şey beklendiği işleri olarak.

Kodu varsayılan python yorumlayıcısı ile çalıştırırsam, otomatik kaydırma her zaman çalışmaz. Kodu ayıkladım ve sorun şu ki, ayar değerleri bir çeşit "gecikme" ye sahip ve sadece bir süre sonra değişti.

Sorum şu ki: ScrolledWindow'un maksimum konumuna nasıl kaydırmalıyım? kullanabileceğim özel bir sinyal mi? veya adjustment-value'u ayarlamanın daha iyi bir yolu var mı?

+2

İyi soru. Bunu bir _long_ zaman için bilmek istedim. [Bu sorudan] çıktı (http://stackoverflow.com/questions/2659026/painting-on-gtkscrolledwindow-or-gtkeventbox), hatta 150 dolarlık bir teklif bile verdim ama umduğum cevabı almadım. . – ptomato

cevap

19

Arama yarıçapım genişledikten sonra yakutla ilgili bir yanıt buldum. sorun gtk ile ilgili olduğu için, bu gibi herhangi bir dilde çözülebilmelidir: gtk.widget 'boyut-ayırma' sinyali ile ağaç görünümünde değişen widget'ı bağlarsınız. gtk.scrolledwindow "üst sayfa_size" değeri. örnek:

self.treeview.connect('size-allocate', self.treeview_changed) 

... ruby-forum.com de orijinal yayına

def treeview_changed(self, widget, event, data=None): 
    adj = self.scrolled_window.get_vadjustment() 
    adj.set_value(adj.upper - adj.page_size) 

linki:

hint hint

+5

üye değişkenleri şimdi gizli gibi görünüyor. get_upper() ve get_page_size() yerine – Fookatchu

7

fookatchu cevabı geliştirilebilir geri arama olabilir, böylece Birden çok widget tarafından kullanılabilir:

def treeview_changed(self, widget, event, data=None): 
    adj = widget.get_vadjustment() 
    adj.set_value(adj.upper - adj.pagesize) 
5

Python GTK 3 versiyon:

adj.set_value(adj.get_upper() - adj.get_page_size())

+0

kullanın. Örneğin çalışmıyor. gtk.treeview: 'adj''un değerleri daha sonra güncellenir, bu nedenle çoğunlukla eklenen son satır görünmez. – jcoppens

İlgili konular