2015-07-12 127 views
2

我现在正在熟悉kivy。 我认为它有很大的潜力,但我确实发现“普通python”和kv-language之间的关系有点混乱,这使得很难理解在哪里做项目。目前看来,在使用python vs kv-l时,行为(幕后发生的事情)并不是一一对应的,总的来说,我认为这对于可用性/生产力而言非常高。kivy scrollview with boxlayout

我已经使用了“速成课程”,这是一个很好的开始得到kivy的第一印象。 无论如何,在学习的过程中,我只是想看看是否可以制作一个盒式视图可滚动 - 事实证明,我不能。

,使此代码的工作现在需要的,即扩大了标签的“纹理大小”,并同时具有调节到一个滚动型?

如果BoxLayout的有size_hint_y:无,标签不扩展到文本,但滚动视图可以在行动使该窗口非常小的时候可以看到。

如果BoxLayout的有size_hint_y:1,标签扩大,但apparantly的BoxLayout的高度并没有改变,即滚动视图窗口似乎是相同的,与size_hint_y:无

如果我只是把一个高度大,滚动视图涵盖这一点,但我希望,它可能获得连接到它的内容的BoxLayout的动态高度。

我玩过高度,size_hints等,我还没有找到一个组合工作,有时会得到警告,由于内部重绘循环代码需要重新编制吗?

我在想什么/没有理解?

代码如下。

from kivy.base import runTouchApp 
from kivy.lang import Builder 
from kivy.uix.scrollview import ScrollView 

Builder.load_string(""" 

<ScrollableLabel>: 
    BoxLayout: 
     orientation: 'vertical' 
     # size_hint_y: 1 
     size_hint_y: None 
     height: 400 #self.size[1] 
     canvas: 
      Color: 
       rgba: (1, 0, 0, .5) # DarkOliveGreen 
      Rectangle: 
       size: self.size 
       pos: self.pos 
     Label: 
      id: bust 
      text: 'a string that is long ' * 10 
      font_size: 50 
      text_size: self.width, None 
      size_hint_y: None 
      height: self.texture_size[1] 
      canvas: 
       Color: 
        rgba: (0, 1, 0, .5) # DarkOliveGreen 
       Rectangle: 
        size: self.size 
        pos: self.pos 
     Label: 
      text: '2 strings that are long ' * 10 
      text_size: self.width, None 
      size_hint_y: None 
      height: self.texture_size[1] 
     Button: 
      text: 'just testing' 



""") 

class ScrollableLabel(ScrollView): 
    pass 

runTouchApp(ScrollableLabel()) 

回答

4

BoxLayout的设计是为了让自己的孩子充满自己。对于动态调整你想有一个更好的布局是网格布局,其中有可以绑定到了自动调整大小一个minimum_height。

<ScrollableLabel>: 
    GridLayout: 
     cols: 1 
     size_hint_y: None 
     height: self.minimum_height 
     canvas: 
      Color: 
       rgba: (1, 0, 0, .5) # DarkOliveGreen 
      Rectangle: 
       size: self.size 
       pos: self.pos 
     Label: 
      id: bust 
      text: 'a string that is long ' * 10 
      font_size: 50 
      text_size: self.width, None 
      size_hint_y: None 
      height: self.texture_size[1] 
      canvas: 
       Color: 
        rgba: (0, 1, 0, .5) # DarkOliveGreen 
       Rectangle: 
        size: self.size 
        pos: self.pos 
     Label: 
      text: '2 strings that are long ' * 10 
      text_size: self.width, None 
      size_hint_y: None 
      height: self.texture_size[1] 
     Button: 
      text: 'just testing' 
""") 
+0

由于按预期工作,我不会想到我自己。 – ahed87