2016-08-19 18 views
0

FloatLayoutに見つけるのに問題があります。kivy:FloatLayoutでスクロールラベルを見つける方法

元のコードはAlexander Taylorのものです。リンク:https://github.com/kivy/kivy/wiki/Scrollable-Label

私はscroll labelを図のように位置させたいと思っています。

enter image description here

位置の値は、次のとおり

VTOP =スクリーンの高さ/ 10

VBOTTOM =スクリーンの高さ/ 20

hleft =スクリーンの幅/ 20

hright =画面幅/ 40

元のコードにFloatLayoutを追加しました。ここに私が変更したコードがあります。

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.scrollview import ScrollView 
from kivy.properties import StringProperty 
from kivy.lang import Builder 
from kivy.uix.floatlayout import FloatLayout 

long_text = 'yay moo cow foo bar moo baa ' * 200 

Builder.load_string(''' 
<ScrollableLabel>: 
    FloatLayout: 
     Label: 
      size: root.width - root.width/20 - root.width/40, root.height - root.height/10 - root.height/20 
      pos: root.width /20, root.height/20 
      #size_hint: (None, None) 
#   valign: 'top' 
      size_hint_y: None 
      height: self.texture_size[1] 
      text_size: self.width - self.width/20 - self.width/40, self.height - self.height/10 - self.height/20 
#   text_size: self.width , None 
      font_size: 30 
      text: root.text 
''') 

class ScrollableLabel(ScrollView): 
    text = StringProperty('') 

class ScrollApp(App): 
    def build(self): 
     return ScrollableLabel(text=long_text) 

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

上記のコードで表示されているように、スクロールラベルを見つける方法をいくつか試しましたが、必要な結果が得られません。

コードを正しく作成するようあなたのアイデアを尋ねます。ありがとう!

答えて

2

あなたの問題はあなたのアプリのメインウィジェットはScrollViewから派生していると思いますが、あなたは内部エリアをスクロール可能にしたいだけです。 ScrollView内にFloatLayoutがあります。私は、メインのレイアウトウィジェットを持ち、その中にScrollableLabelを埋め込むアプローチを提案します。

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.scrollview import ScrollView 
from kivy.uix.floatlayout import FloatLayout 
from kivy.properties import StringProperty 
from kivy.lang import Builder 

long_text = 'yay moo cow foo bar moo baa ' * 100 

Builder.load_string(''' 
<MainApp>: 
    ScrollableLabel: 
     id: scrollable 
     pos: self.parent.pos[0]+self.parent.size[0]/20, self.parent.pos[1]+self.parent.size[1]/20 
     size_hint: 18.5/20.0, 0.85 

<ScrollableLabel>: 
    Label: 
     size_hint_y: None 
     height: self.texture_size[1] 
     text_size: self.width, None 
     text: root.text 
''') 

class MainApp(FloatLayout): 
    pass 

class ScrollableLabel(ScrollView): 
    text = StringProperty('') 

class ScrollApp(App): 
    def build(self): 
     app = MainApp() 
     app.ids["scrollable"].text = long_text 
     return app 

if __name__ == "__main__": 
    ScrollApp().run() 
+0

ありがとうございました!できます!しかし、私は 'size_hint:18.5/20.0、0.85'の理由を聞かせてもよいでしょうか?私はここで値を理解していない。 – Rita

+1

ああ、それは指定したマージンに基づいて、1 - (1/20) - (1/40)、1 - (1/10) - (1/20)です。 – TimSC

+0

私はそれを得た。ありがとう! – Rita

関連する問題