2016-12-20 15 views
0

私は、内部にテキストで透明なビットを作成しようとしています。問題は、レイアウト内にテキストがないことと、理由がわからないことです。ラベルがレイアウト内にないのはなぜですか?

from kivy.core.window import Window 
from kivy.app import App 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.relativelayout import RelativeLayout 
from kivy.uix.button import Label, Button 
from kivy.graphics import Rectangle,Color 

class Visor(App): 

def build(self): 
    Window.size=(400,600) 
    print(Window.size) 

    r = RelativeLayout() 
    r.size = (400, 550) 
    with r.canvas: 
     Color(0.6, 0.6, .1, 0.8) 
     bg_rect = Rectangle(pos=(0,0), size=(400, 550)) 

    r2 = FloatLayout() 
    r2.size=(100,150) 
    with r2.canvas: 
     Color(.9, 0.1, 0.6, 0.8) 
     bg_rect = Rectangle(pos=(0, 0), size=(200,150)) 

    r2.pos=(50,70) 
    r.add_widget(r2) 
    r2.add_widget(Label(text="Detective Comics Vol.1 #878")) 
    return r 

if __name__ == "__main__": 
    Visor().run() 

答えて

0

Kivyウィジェットには、親サイズに応じてウィジェットのサイズを変更するプロパティsize_hintがあります。これはデフォルトで(1,1)に設定されているため、親のサイズが変更されるたびに子のサイズが変更されます。

矩形のサイズを設定すると、これらは絶対値で与えられます。絶対値はまったく変更されません。つまり、色付きの矩形はレイアウトの「実際の」サイズではありません。

少なくともアプリケーションの起動時には、ウィンドウのサイズがすぐに変更され、ルートウィンドウ()が表示されます。すべての子ウィジェットはウィンドウサイズの100%にリサイズされますが、色付きの長方形はサイズ変更されません。

ラベルのsize_hintNone, Noneに設定すると、サイズ変更が行われず、必要に応じて表示されます。

もっと良い方法は、kv言語ファイルで長方形などを定義することです。私。

RelativeLayout: 
    Label: 
     text: "Detective Comics Vol.1 #878" 
    canvas: 
     Color(0.8, 0.8, .1, 0.8) 
     Rectangle(pos=self.pos, size=self.size) 
... 

このように相対レイアウトの位置またはサイズが変更されると、その矩形が更新されます。

1

レイアウトを使用している場合はsize_hintを使用し、0〜1(0%〜%100)の比例座標を使用します。しかし、あなたがsizeを尊重したい場合、あなたは(None, None)にそれを設定することにより、size_hintを無効にする必要があります

from kivy.core.window import Window 
from kivy.app import App 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.relativelayout import RelativeLayout 
from kivy.uix.button import Label, Button 
from kivy.graphics import Rectangle,Color 

class Visor(App): 

    def build(self): 
     Window.size=(400,600) 
     print(Window.size) 

     r = RelativeLayout() 
     r.size_hint = (None, None) 
     r.size = (400, 550) 
     with r.canvas: 
      Color(0.6, 0.6, .1, 0.8) 
      bg_rect = Rectangle(pos=(0,0), size=(400, 550)) 

     r2 = FloatLayout() 
     r2.size_hint = (None, None) 
     r2.size=(100,150) 
     with r2.canvas: 
      Color(.9, 0.1, 0.6, 0.8) 
      bg_rect = Rectangle(pos=(0, 0), size=(200,150)) 

     r2.pos=(50,70) 
     r.add_widget(r2) 
     r2.add_widget(Label(text="Detective Comics Vol.1 #878")) 
     return r 

if __name__ == "__main__": 
    Visor().run() 

また、あなたがこのためにKivy言語を使用する必要があり、それが道に簡単です、それは簡単に内部のプロパティをバインドすることができます。


ファイルの先頭にこのコードを追加すると、レイアウトの問題をスポッティングあなたを助けることができる:説明と他のトリックのために

from kivy.lang import Builder 
Builder.load_string(''' 
<Widget>: 
    canvas.after: 
     Line: 
      rectangle: self.x+1,self.y+1,self.width-1,self.height-1 
      dash_offset: 5 
      dash_length: 3 
''') 

go here

+0

感謝を。私は間違いを見ます。 – Pedro

関連する問題