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()
ご回答ありがとうございます。スクロールRstDocumentとScrollViewのコンビネーションが一緒に機能しないようです。私はRstDocumentを取り除き、Labelに変更しました。しかし、AccordionItemsのサイジングとは依然として苦労しています。 AccorionItemの高さを固定したいのですが、Kivyがこれを扱うよりも簡単に聞こえます:( –
AccordionItemの高さは固定されています。タイトルがあるAccordionItemボックスやボタンやラベルの高さ行くか? – Gumboy
AccordionItemのサイジングに関する問題は、self.update_sizeへのバインドにあります。上記の例では、アイテム自体のサイズにも影響があります - それは私たちが望むものではありません。スクリーン更新を行ってから、Accordionの必要な高さを計算してください。Kivy's Clockを使って明示的に呼び出し、必要な高さを計算する方がよいでしょう。 –