2013-05-23 5 views
5

मैं किवी में ग्रिडलायआउट बनाना चाहता हूं जिसमें कई आयत के साथ कुछ आयत बटन हैं। ऐसा करने के लिए, मैं छवि को स्केल करना चाहता हूं (जिस तरह से मैं इसे करने के लिए नीचे दिखाया गया है) और फिर उन हिस्सों को फसल/छुपाएं जो विजेट सीमाओं को ओवरफ़्लो करते हैं। आकार बदलना अच्छा काम करता है, लेकिन मैं यह नहीं समझ सकता कि आयत के बाहर वाले हिस्सों को कैसे छिपाना/फसल करना है। उदाहरण के लिए: यदि विजेट में 10px x 10px के आयाम हैं और मेरी छवि 100px x 200px है, तो मैं इसे 10px x 20px पर रीज़िज कर दूंगा और इसे विजेट में केंद्रित कर दूंगा, लेकिन नीचे 5px और abowe दिखाई देगा। मैं नहीं चाहता कि। :) क्लाउड किसी ने मुझे इस समस्या से मदद की है?Kivy: विजेट को अतिप्रवाह की तरह व्यवहार कैसे करें: छुपा

class PlaceIcon(Widget): 
    def __init__(self,image_path, **kwargs): 
     super(PlaceIcon, self).__init__(**kwargs) 
     self.bind(size=self.adjust_size) 
     self.image = Image(source=image_path) 
     self.image_path = image_path 

    def adjust_size(self,*args): 
     (a,b) = self.image.texture.size 
     (x,y) = self.size 
     (x1,y1) = self.pos 
     if x > y: 
      scale = x/a 
     else: 
      scale = y/b 
     x1 -= (scale*a-x)/2 
     y1 -= (scale*b-y)/2 
     with self.canvas: 
      self.canvas.clear() 
      self.background = Rectangle(texture=self.image.texture, pos=(x1,y1), size=(scale*a,scale*b)) 

उत्तर

2

मैं Texture.get_region को देखने के लिए कहेंगे: http://kivy.org/docs/api-kivy.graphics.texture.html#kivy.graphics.texture.Texture.get_region

तो तुम बनावट आप प्रदर्शित करना चाहते का ही हिस्सा है और गुजर उपयोग कर सकते हैं जैसे कि यह एक बिल्कुल अलग बनावट था।

स्टैंसिल व्यू का उपयोग करने का एक और तरीका होगा, लेकिन मुझे लगता है कि get_region बेहतर है।

+1

हाँ, मुझे यही चाहिए! धन्यवाद। –

संबंधित मुद्दे