2013-05-23 56 views
5

KivyでGridLayoutを作成したいのですが、サイズの異なるいくつかのカスタム画像を持つ多くの四角形のボタンがあります。これを行うには、画像を拡大/縮小する方法(これを行う方法を以下に示します)を行い、ウィジェットの境界をオーバーフローさせる部分を切り抜く/隠したいと思います。サイズ変更は素晴らしいですが、矩形の外にある部分を隠す/切り抜く方法を理解することはできません。たとえば、ウィジェットのサイズが10px x 10pxで、画像が100px x 200pxの場合、それを10px x 20pxに変換し、ウィジェットの中央に配置しますが、下に5pxとaboweが表示されます。私はそれを望んでいない。 :)誰かがこの問題で私を助けるクラウド?Kivy:オーバーフローのような振る舞いをする方法:hidden

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

あなたはそれが全く異なる質感であるかのように表示し、渡したいテクスチャの一部のみを使用することができるようにします。

もう一つの方法は、StencilViewを使用することですが、ここではget_regionが優れていると思います。

+1

ええ、それは私が必要なものです!ありがとうございました。 –