Невозможно использовать scrollview в файлах .kv - PullRequest
0 голосов
/ 05 августа 2020

Извините, если этот вопрос задавали раньше, но по какой-то причине scrollview у меня не работает в kivy. Я новичок в этом, поэтому, пожалуйста, не будьте слишком суровы sh. Я все время сталкиваюсь с этой проблемой:

TypeError: 'NoneType' object is not subscriptable

Я пытаюсь использовать полосу прокрутки в другой более длинной программе, но мне нужно сначала выяснить, как работает режим прокрутки в kivy. Я был бы очень признателен, если бы кто-нибудь мог сказать мне, что не так с этим кодом.

Это мой файл .kv

    <MenuScreen>:
        FloatLayout:
            Button:
                text: 'Write'
                on_press: app.write()
                size_hint: .3, .2
                background_color: 1, 2, 1, 1
                pos_hint: {'x': .35, 'y': .4}
    <WritingScreen>:
            ScrollView:
                do_scroll_x: False
                do_scroll_y: True
                Label:
                    size_hint_y: None
                    height: self.texture_size[1]
                    text_size: self.width
                    padding: 10, 10
                    text:
                        'really some amazing text\n' * 100

Это мой файл .py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

Builder.load_file('text.kv')


# Declare both screens
class MenuScreen(Screen):
    pass


class WritingScreen(Screen):
    pass


# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(WritingScreen(name='Write'))
screens = [Screen(name='Title {}'.format(i)) for i in range(2)]


class TestApp(App):
    def build(self):
        return sm

    # show the scrollview
    def write(self):
        sm.current = 'Write'


if __name__ == '__main__':
    TestApp().run()

1 Ответ

0 голосов
/ 05 августа 2020

Kivy и Python очень разборчивы в отношении отступов. В вашем text.kv отступ строки ScrollView неправильный. Другой проблемой является строка:

text_size: self.width

Атрибут text_size ожидает два значения, поэтому предоставление только одного значения вызовет ошибку. Я не думаю, что вам все равно нужна эта строка.

Вот модифицированная версия вашего файла `text.kv ', которая будет работать:

<MenuScreen>:
    FloatLayout:
        Button:
            text: 'Write'
            on_press: app.write()
            size_hint: .3, .2
            background_color: 1, 2, 1, 1
            pos_hint: {'x': .35, 'y': .4}
<WritingScreen>:
    ScrollView:
        do_scroll_x: False
        do_scroll_y: True
        Label:
            size_hint_y: None
            height: self.texture_size[1]
            # text_size: self.width
            padding: 10, 10
            text:
                'really some amazing text\n' * 100
...