2016-10-01 7 views
0

これはおそらく、kivyのより深いところについての簡単な理解が間違っていると思うが、2つの画像を生成するRoundedImageクラスがある。画面のコーナーが少しずれています。どうしたの?Kivy Image子クラスは2つの画像を生成する

スクリーンショット: http://imgur.com/gallery/IRYfr

私はサブクラス化イメージとは何かかもしれないと思いますか?

class RoundedImage(Image,StyleUnit): 

    _styleist = RadialGradientStyleist  
    _radius = [20] 
    _source = '' 
    _style = None 
    def __init__(self,**kwargs): 

     super(RoundedImage,self).__init__(**kwargs) 
     #self._source = source 
     #self.initalizeStyle() 

     with self.canvas: 
      StencilPush() 
      self.m_rect = RoundedRectangle(size = self.norm_image_size , \ 
              pos=self.center, \ 
              radius=self._radius) 
      StencilUse() 
      self.rect = Rectangle( size = self.norm_image_size , \ 
            pos = self.center, \ 
            texture = self.texture) 
      StencilUnUse() 
      StencilPop() 
      #Color(1,1,1) 
      #self.line = Line( rounded_rectangle=self.pos+self.size+self._radius, 
      #  width=10) 


     self.bind(pos = self.update_rect, 
        size = self.update_rect) 

    def update_rect(self,*args): 
     self.m_rect.pos = self.center 
     self.m_rect.size = self.norm_image_size 
     self.rect.pos = self.center 
     self.rect.size = self.norm_image_size 

アプリケーションコードは単純です:

class ProfilesApp(App): 

    def build(self): 
     profile = RoundedImage(source = source,#self.imageLocation,\ 
            allow_stretch=True) 
     return profile 

profileApp = ProfilesApp() 
profileApp.run() 
+0

ため.kv定義にこれを追加することになりましたか? – jligeza

答えて

1

Okこれは、ステンシル命令のマスクを削除しないという問題でした。

私はあなたが何をしたいかどうRoundedRectangle

''' 
<-RoundedImage>: 
canvas: 
Color: 
rgb: self.color 
StencilPush 
RoundedRectangle: 
size: self.norm_image_size 
pos: self.center[0] - self.norm_image_size[0]/2.0,self.center[1] - self.norm_image_size[1]/2.0 
radius: self._radius 
StencilUse 
Rectangle: 
texture: self.texture 
size: self.norm_image_size 
pos: self.center[0] - self.norm_image_size[0]/2.0,self.center[1] - self.norm_image_size[1]/2.0 
StencilUnUse 
RoundedRectangle: 
size: self.norm_image_size 
pos: self.center[0] - self.norm_image_size[0]/2.0,self.center[1] - self.norm_image_size[1]/2.0 
radius: self._radius 
StencilPop 

''' 
1

ノー輸入、ノーその他の必要なクラスと私はどこかの矩形を丸めたものを見てきましたが、私はそのカスタムクラスを何の手掛かりを持っていませんそう、実行可能なコードはありません。とにかくそれを使って作業しましょう。

はい、それはそのサブクラス化のためです。画像は既にキャンバスに配置されており、そこにあるテクスチャはRectangle(texture=<here>)です。その代わりに、このようなRectangle用画像使用sourceキーワード引数のサブクラスを削除します。

Rectangle(source=<path to image>)

をもう一度あなたがImageから継承するクラスでsourceを使用していますが、あなたはそれを変更する必要があり、その後、

self.source = kwargs.get('source')

代わりの:kwargsからからsourceをフェッチdo Rectangle(source=self.source)

関連する問題