2011-03-07 30 views
17

मेरे पास ScrolledWindow के अंदर एक वृक्षदृश्य-विजेट है, जो रनटाइम के दौरान आबादी वाला है। मैं ScrolledWindow सूची के अंत तक स्वत: स्क्रॉल करना चाहता हूं। ScrolledWindow के vadjustment को समायोजित करके, मैंने समस्या हल की "हर बार एक पंक्ति को वृक्षदृश्य में डाला जाता है। उदाहरण:gtk.scrolledwindow को स्वतः स्क्रॉल कैसे करें?

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

यदि मैं एक इंटरैक्टिव आईपीथॉन सत्र में कोड चलाता हूं और अपना मान निर्धारित करता हूं, तो सब कुछ अपेक्षित काम करता है।

यदि मैं डिफ़ॉल्ट पायथन दुभाषिया के साथ कोड चलाता हूं, तो ऑटो-स्क्रॉल हर समय काम नहीं करता है। मैंने कोड डीबग किया और समस्या यह प्रतीत होती है कि समायोजन मानों में कुछ प्रकार का "अंतराल" होता है और कुछ समय के बाद ही बदल जाता है।

मेरा प्रश्न है: मैं ScrolledWindow की अधिकतम स्थिति को स्क्रॉल, विश्वसनीय रूप से कैसे स्क्रॉल करूं? एक विशेष सिग्नल जेनरेट किया गया है जिसका मैं उपयोग कर सकता हूं? या adjustment-value सेट करने का कोई बेहतर तरीका है?

+2

अच्छा प्रश्न है। मैं इसे _long_ समय के लिए जानना चाहता था। यह [इस सवाल] से बाहर आया (http://stackoverflow.com/questions/2659026/painting-on-gtkscrolledwindow-or-gtkeventbox), जिसने मुझे 150 का इनाम भी दिया लेकिन मुझे उम्मीद नहीं मिली । – ptomato

उत्तर

19

मेरी खोज-त्रिज्या को चौड़ा करने के बाद, मुझे एक रूबी से संबंधित उत्तर मिला। चूंकि समस्या gtk से संबंधित है, इसे किसी भी भाषा में हल करने में सक्षम होना चाहिए:

आप gtk.widget के 'आकार-आवंटित' सिग्नल और सेट के साथ, मेरे मामले में वृक्षदृश्य को बदलते हुए विजेट को जोड़ते हैं। gtk.scrolledwindow "ऊपरी - पृष्ठ_ आकार" के लिए मूल्य। उदाहरण:

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

... ruby-forum.com पर मूल पोस्ट करने के लिए

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

लिंक:

hint hint

+5

सदस्य चर अब छिपा हुआ प्रतीत होता है। get_upper() और get_page_size() के बजाय – Fookatchu

7

fookatchu के जवाब सुधार किया जा सकता तो कॉलबैक सकता है कि एकाधिक विगेट्स द्वारा उपयोग किया जाना चाहिए:

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

अजगर जीटीके 3 संस्करण:

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

+0

का उपयोग करें, उदाहरण में यह काम नहीं करता है। gtk.treeview: 'adj' के मान बाद में अपडेट किए जाते हैं, इसलिए अधिकतर, अंतिम अतिरिक्त पंक्ति दिखाई नहीं देगी। – jcoppens