Как создать прокручиваемый floatlayout на Kivy? - PullRequest
0 голосов
/ 10 января 2020

Я хочу создать прокручиваемый floatlayout .

Я нашел этот код в inte rnet, чтобы создать прокручиваемый Gridlayout :

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from functools import partial
from kivy.uix.scrollview import ScrollView
from kivy.uix.slider import Slider
from kivy.uix.button import Button

class Board(FloatLayout):
    def __init__(self, **kwargs):
        super(Board, self).__init__(**kwargs)
        scrlv = ScrollView(size_hint=(0.9,0.95))
        layout2 = GridLayout(cols=1, size_hint_y=None)
        layout2.bind(minimum_height=layout2.setter('height'))
        scrlv.add_widget(layout2)
        s = Slider(min=0, max=1, value=25, orientation='vertical', step=0.01, size_hint=(0.1, 0.95))
        scrlv.bind(scroll_y=partial(self.slider_change, s))
        s.bind(value=partial(self.scroll_change, scrlv))

        self.add_widget(scrlv)
        self.add_widget(s)


        for i in range(1, 301):
            btn = Button(text=str(i), size_hint_y=None, height=60, valign='middle', font_size=12)
            btn.text_size = (btn.size)
            layout2.add_widget(btn)


    def scroll_change(self, scrlv, instance, value):
        scrlv.scroll_y = value

    def slider_change(self, s, instance, value):
        if value >= 0:
            s.value = value

class TestApp(App):
    def build(self):
        self.title = 'Test'
        return Board()


TestApp().run()

Работает нормально, но когда я попытался преобразовать его в floatlayout следующим образом:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from functools import partial
from kivy.uix.scrollview import ScrollView
from kivy.uix.slider import Slider
from kivy.uix.button import Button

class Board(FloatLayout):
    def __init__(self, **kwargs):
        super(Board, self).__init__(**kwargs)
        scrlv = ScrollView(size_hint=(0.9, 0.95))
        layout2 = FloatLayout(size_hint_y=None)
        layout2.bind(minimum_height=layout2.setter('height'))
        scrlv.add_widget(layout2)
        s = Slider(min=0, max=1, value=25, orientation='vertical', step=0.01, size_hint=(0.1, 0.95))
        scrlv.bind(scroll_y=partial(self.slider_change, s))
        s.bind(value=partial(self.scroll_change, scrlv))

        self.add_widget(scrlv)
        self.add_widget(s)


        for i in range(1, 301):
            btn = Button(text=str(i), size_hint_y=None, height=60, valign='middle', font_size=12)
            btn.text_size = (btn.size)
            btn.y = 100 - (60*i)
            layout2.add_widget(btn)


    def scroll_change(self, scrlv, instance, value):
        scrlv.scroll_y = value

    def slider_change(self, s, instance, value):
        if value >= 0:
            s.value = value

class TestApp(App):
    def build(self):
        self.title = 'Test'
        return Board()


TestApp().run()

Это не сработало, и я получил эту ошибку:

layout2.bind(minimum_height=layout2.setter('height'))
   File "kivy\_event.pyx", line 427, in kivy._event.EventDispatcher.bind
 KeyError: 'minimum_height'

Я читал об этом в inte rnet, и я понимаю, что floatlayout не имеет атрибута "imum_height ", но я не знаю, чем я могу заменить его. Есть предложения?

1 Ответ

0 голосов
/ 10 января 2020

Чтобы сделать прокрутку FloatLayout:

  • Установите для size_hint значение None, None
  • Установите для его размера нечто большее, чем ScrollView
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...