के साथ आकार बदलने पर स्वचालित छवि स्केलिंग मेरे पास एक GtkImage
विजेट एक आकार बदलने योग्य विंडो में है और एक संदर्भ GdkPixBuf
छवि को संग्रहीत करना है जिसे मैं GtkImage
भरना चाहता हूं।(पीई) जीटीके
मैं GdkPixBuf
पैमाने पर इस पद्धति का उपयोग GtkImage
विजेट को भरने के लिए कर सकते हैं:
def update_image(self, widget=None, data=None):
# Get the size of the source pixmap
src_width, src_height = self.current_image.get_width(), self.current_image.get_height()
# Get the size of the widget area
widget = self.builder.get_object('image')
allocation = widget.get_allocation()
dst_width, dst_height = allocation.width, allocation.height
# Scale preserving ratio
scale = min(float(dst_width)/src_width, float(dst_height)/src_height)
new_width = int(scale*src_width)
new_height = int(scale*src_height)
pixbuf = self.current_image.scale_simple(new_width, new_height, gtk.gdk.INTERP_BILINEAR)
# Put the generated pixbuf in the GtkImage widget
widget.set_from_pixbuf(pixbuf)
जब मैं update_image
फोन मैन्युअल रूप से यह काम करता है के रूप में उम्मीद। अब जब मैं GtkImage विजेट का आकार बदलता हूं तो स्केलिंग स्वचालित रूप से हो जाती है। मेरे साथ आया सबसे अच्छा समाधान update_image
विधि को configure-event
विंडो की जीटीके घटना से बांधना था। खिड़की के प्रत्येक आकार में परिवर्तन के बाद, छवि वास्तव में ठीक से स्केल किया गया है। हालांकि मेरे पास इस समाधान के साथ दो मुद्दे हैं:
- मैं केवल खिड़की को बड़ा कर सकता हूं। एक बार छवि को अपस्केल करने के बाद, जीटीके मुझे खिड़की को छोटा आकार देने नहीं देगा क्योंकि खिड़की अपने विगेट्स से छोटी नहीं हो सकती है। मैं समझता हूं कि यह ऐसा क्यों काम करता है लेकिन मुझे नहीं पता कि इस व्यवहार को कैसे बदला जाए।
- शायद यह कोई बड़ा सौदा नहीं है लेकिन मैं शीर्ष-स्तरीय विंडो के बजाय GtkImage विजेट से एक ईवेंट पसंद करता।
मुझे इस तरह की छोटी समस्या के लंबे स्पष्टीकरण के लिए खेद है, मुझे आशा है कि आप मेरी मदद कर सकेंगे।
बहुत बहुत धन्यवाद, स्क्रॉलडविंडो चाल काम करती है। मुझे एक 'GtkWarning मिलता है: gtk_scrolled_window_add(): गैर स्क्रोल करने योग्य विजेट का उपयोग gtk_scrolled_window_add_with_viewport() इसके बजाय' लेकिन अगर मैं व्यूपोर्ट जोड़ता हूं तो स्क्रॉलबार दिखाई देता है जब मैं खिड़की के आकार को कम कर रहा हूं तो मैं इसे अभी इस तरह छोड़ दूंगा। प्रत्येक gtk पुनरावृत्ति पर 'एक्सपोज़-इवेंट' कहा जाता है, इसलिए यह सीपीयू उपयोग को अधिकतम करता है। – Jim