From f487db9c04ee05a4e4467cd45788d04f85e17e49 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 24 Jun 2021 14:00:01 +0800 Subject: [PATCH] bugfix --- kivyblocks/scrollpanel.py | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 kivyblocks/scrollpanel.py diff --git a/kivyblocks/scrollpanel.py b/kivyblocks/scrollpanel.py new file mode 100644 index 0000000..90d5d14 --- /dev/null +++ b/kivyblocks/scrollpanel.py @@ -0,0 +1,59 @@ + +from kivy.uix.scrollview import ScrollView +from kivy.effects.scroll import ScrollEffect +from kivy.uix.widget import Widget +from kivy.uix.boxlayout import BoxLayout +from kivy.factory import Factory + +class ScrollPanel(ScrollView): + def __init__(self,inner=None, **kw): + print('ScrollPanel(): kw=', kw) + super(ScrollPanel,self).__init__() + self.effect_cls = ScrollEffect + if not inner: + kw.update({ + 'size_hint':(None,None), + 'orientation':'vertical' + }) + self._inner = BoxLayout(**kw) + elif isinstance(inner, Widget): + self._inner = inner + else: + self._inner = Factory.Blocks().widgetBuild(inner) + + self._inner.bind( + minimum_height=self._inner.setter('height')) + self._inner.bind( + minimum_width=self._inner.setter('width')) + super(ScrollPanel,self).add_widget(self._inner) + + def add_widget(self,widget,**kw): + a = self._inner.add_widget(widget,**kw) + return a + + def clear_widgets(self,**kw): + a = self._inner.clear_widgets(**kw) + + def remove_widget(self,widget,**kw): + a = self._inner.remove_widget(widget,**kw) + return a + +if __name__ == '__main__': + from kivy.app import App + from kivy.uix.label import Label + from kivy.uix.button import Button + import codecs + + class MyApp(App): + def build(self): + root = ScrollPanel(size=(400,400), + pos_hint={'center_x': .5, 'center_y': .5} + ) + with codecs.open(__file__,'r','utf-8') as f: + txt = f.read() + lines = txt.split('\n') + for l in lines: + root.add_widget(Label(text=l,color=(1,1,1,1),size_hint=(None,None),size=(1200,40))) + return root + + MyApp().run()