2012-09-11 19 views
5

हालांकि मुझे इस प्रश्न का आंशिक और अप्रत्यक्ष उत्तर मिल गया है (देखें, उदाहरण के लिए, this link), मैं इसे यहां पोस्ट कर रहा हूं क्योंकि पहेली के बिट्स और टुकड़ों को एक साथ रखना मुझे थोड़ा सा समय लगा, और मैंने सोचा कि किसी और को मिल सकता है उपयोग के मेरे प्रयास।पायजी 3 के साथ पायथन 3 में स्वचालित छवि आकार बदलने का तरीका कैसे करें?

तो, जीटीके + में बटनों पर छवियों के निर्बाध आकार को कैसे प्राप्त करें, जब मूल विंडो का आकार बदलता है?

उत्तर

5

प्रश्न में पोस्ट किए गए लिंक में पीईजीटीके के लिए पेश किया गया समाधान जीटीके 3 के साथ पायथन-जीआई में काम नहीं करता है, हालांकि सामान्य बॉक्स के स्थान पर स्क्रोलडविंडो का उपयोग करने की चाल बहुत उपयोगी थी।

कंटेनर के साथ आकार बदलने के लिए बटन पर एक छवि प्राप्त करने के लिए मेरा न्यूनतम कार्य समाधान यहां दिया गया है।

from gi.repository import Gtk, Gdk, GdkPixbuf 

class ButtonWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="Button Demo") 
     self.set_border_width(10) 
     self.connect("delete-event", Gtk.main_quit) 
     self.connect("check_resize", self.on_check_resize) 

     self.box = Gtk.ScrolledWindow() 
     self.box.set_policy(Gtk.PolicyType.ALWAYS, 
         Gtk.PolicyType.ALWAYS) 
     self.add(self.box) 

     self.click = Gtk.Button() 
     self.box.add_with_viewport(self.click) 

     self.pixbuf = GdkPixbuf.Pixbuf().new_from_file('gtk-logo-rgb.jpg') 
     self.image = Gtk.Image().new_from_pixbuf(self.pixbuf) 
     self.click.add(self.image) 

    def resizeImage(self, x, y): 
     print('Resizing Image to ('+str(x)+','+str(y)+')....') 
     pixbuf = self.pixbuf.scale_simple(x, y, 
              GdkPixbuf.InterpType.BILINEAR) 
     self.image.set_from_pixbuf(pixbuf) 

    def on_check_resize(self, window): 
     print("Checking resize....") 

     boxAllocation = self.box.get_allocation() 
     self.click.set_allocation(boxAllocation) 
     self.resizeImage(boxAllocation.width-10, 
         boxAllocation.height-10) 

win = ButtonWindow() 
win.show_all() 
Gtk.main() 

(-10 चौड़ाई और ऊंचाई पर बटन में आंतरिक बॉर्डर और गद्दी समायोजित करने के लिए कर रहे हैं। मैं इस के साथ नगण्य बटन पर कोई बड़ा चित्र प्राप्त करने के लिए कोशिश की, लेकिन परिणाम बहुत अच्छा मुड़कर नहीं देखा ।)

इस उदाहरण में उपयोग की जाने वाली जेपीईजी फ़ाइल here से डाउनलोड की जा सकती है।

मैं यह कैसे करना है इसके बारे में और सुझावों का स्वागत करता हूं।

0

self.image = Gtk.Image().new_from_pixbuf(self.pixbuf) शायद होना चाहिए: self.image = Gtk.Image().set_from_pixbuf(self.pixbuf)

आप एक नई छवि बना रहे हैं दो बार।

+0

मैंने अपने परीक्षण कार्यक्रम में इस विधि को बदलने की कोशिश की और मुझे एक ट्रेसबैक (पायथन 3.2, डेबियन व्हीजी) मिला। संभवतः यह विधि एपीआई के लिए नई है (लेकिन प्रलेखन उस पर विरोधाभास करता है)। लेकिन दस्तावेज पढ़ना मुझे लगता है कि आप छवि को दो बार बनाने के बारे में गलत हैं (देखें ['set_from_pixbuf'] (http://www.pygtk.org/pygtk2reference/class-gtkimage.html#method-gtkimage--set-from-pixbuf) और ['new_from_pixbuf'] (http://www.pygtk.org/pygtk2reference/class-gtkimage.html#function-gtk--image-new-from-pixbuf))। वे दोनों pixbuf से एक नई छवि बनाते हैं। एक पिक्सबफ, एक छवि है। – Bobble