2017-12-09 39 views
0

RstDocumentとボタンで構成されるコンテンツを含むアコーディオンを作成したいと思います。アコーディオンは、このコンテンツが所定のスペースより大きい場合、RstDocumentの内容と同様にスクロール可能でなければならない。だから私は次のコードを思いついたが、AccordionItemsのいくつかのクリックの後には、それ以上の相互作用はすべてブロックされている。私はここで間違って何をしていますか? RstDocument Boxlayoutが垂直の横のどちらかであるとき、スクロール効果以下kvyのRstDocumentアコーディオンがすべてのやりとりをブロックしています

from kivy.app import App 
from kivy.uix.scrollview import ScrollView 
from kivy.uix.rst import RstDocument 
from kivy.core.window import Window 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.accordion import Accordion, AccordionItem 
from kivy.uix.button import Button 

class ShowrstApp (App): 

    def update_size(self, instance, *args): 
     instance.size = 60 * len(instance.children) 

    def build (self): 
     numitems = 10 

     root = BoxLayout() 
     accheight = numitems * 60 
     accitems = Accordion(id='acc_panel', orientation='vertical', pos_hint={'top': 1}, size_hint_y=None, 
          height=accheight, md_bg_color=(1, 1, 1, 1)) 

     for i in xrange(numitems): 
      item = AccordionItem(title='This is item: %d' % i) 
      somecontent = BoxLayout(orientation='vertical') 
      somecontent.add_widget(RstDocument(text='Some nicely formatted text here')) 
      somecontent.add_widget(Button(text='click here', height=(42), size_hint=(1,None))) 
      item.add_widget(somecontent) 
      item.bind(children=self.update_size) 
      accitems.add_widget(item) 
     sv = ScrollView(do_scroll_x = False) 
     sv.add_widget(accitems) 

     root.add_widget(sv) 
     return root 

Window.size = (350,650) 
showrst = ShowrstApp() 
showrst.run() 

答えて

0

は動作しますが、私が見た問題は、BoxLayoutを縦に設定したとき、各項目のトグルはミュートだった、あなたは1を行かなければならなかったということでしたボトムアップから1つ。これは奇妙だった。各AccordionItemをクリックすることができます。ここではRstDocumentは表示されません。これは素晴らしい出発点になるはずです。ラベルを使用しているときにこのエフェクトが発生しないことに気付くと、別のオプションになる可能性があります。

from kivy.app import App 
from kivy.uix.scrollview import ScrollView 
from kivy.uix.rst import RstDocument 
from kivy.core.window import Window 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.accordion import Accordion, AccordionItem 
from kivy.uix.button import Button 

class ShowrstApp (App): 

    def update_size(self, instance, *args): 
     instance.height = 100 * len(instance.children) # set Accordion height to the number of accordionItem times the height accordionItem height 

    def build (self): 
     numitems = 10 

     root = BoxLayout() 
     accheight = numitems * 60 
     accitems = Accordion(id='acc_panel', orientation='vertical', size_hint_y=None, pos_hint={'top':1} 
          height=accheight, md_bg_color=(1, 1, 1, 1)) 

     for i in xrange(numitems * 2): # *2 to show it works 
      item = AccordionItem(title='This is item: %d' % i) 
      somecontent = BoxLayout(orientation = 'horizontal') # couldn't solve an issue I notice so I used horizontal 
      somecontent.add_widget(RstDocument(text='Some nicely formatted text here' * 10)) 
      somecontent.add_widget(Button(text='click here', height=(42), size_hint=(1,None))) 
      item.add_widget(somecontent) 
      accitems.bind(size=self.update_size) 
      accitems.add_widget(item) 
     sv = ScrollView(do_scroll_x = False) 
     sv.add_widget(accitems) 

     root.add_widget(sv) 
     return root 


Window.size = (350,650) 
showrst = ShowrstApp() 
showrst.run() 
+0

ご回答ありがとうございます。スクロールRstDocumentとScrollViewのコンビネーションが一緒に機能しないようです。私はRstDocumentを取り除き、Labelに変更しました。しかし、AccordionItemsのサイジングとは依然として苦労しています。 AccorionItemの高さを固定したいのですが、Kivyがこれを扱うよりも簡単に聞こえます:( –

+0

AccordionItemの高さは固定されています。タイトルがあるAccordionItemボックスやボタンやラベルの高さ行くか? – Gumboy

+0

AccordionItemのサイジングに関する問題は、self.update_sizeへのバインドにあります。上記の例では、アイテム自体のサイズにも影響があります - それは私たちが望むものではありません。スクリーン更新を行ってから、Accordionの必要な高さを計算してください。Kivy's Clockを使って明示的に呼び出し、必要な高さを計算する方がよいでしょう。 –

関連する問題