ScrollLabel выдает ValueError - PullRequest
       23

ScrollLabel выдает ValueError

1 голос
/ 11 ноября 2019

Привет всем, я новичок в этом веб-сайте, поэтому я заранее извиняюсь, если я делаю что-то не так, ScrollLabel из kivy-garden выдает мне ошибку, когда я пытаюсь использовать его в основном, я пытаюсь сделать консольный журнал, и мне нужнобыть в состоянии прокрутить текстовое поле по мере его заполнения, я пробовал виджет scrollview, но он выдает черный экран, когда я отображаю слишком много текста, даже если я использую пример ScrollLabel, я получаю ту же ошибку, что и полученная ошибка:

 Traceback (most recent call last):
   File "/home/fodderpod/Apps/FPCU-02/GUI/main.py", line 184, in <module>
     presentation = Builder.load_file("mainScreenHolder.kv")
   File "/usr/local/lib/python3.7/dist-packages/kivy/lang/builder.py", line 301, in load_file
     return self.load_string(data, **kwargs)
   File "/usr/local/lib/python3.7/dist-packages/kivy/lang/builder.py", line 405, in load_string
     rule_children=rule_children)
   File "/usr/local/lib/python3.7/dist-packages/kivy/lang/builder.py", line 657, in _apply_rule
     root=rctx['ids']['root'], rule_children=rule_children)
   File "/usr/local/lib/python3.7/dist-packages/kivy/uix/widget.py", line 469, in apply_class_lang_rules
     rule_children=rule_children)
   File "/usr/local/lib/python3.7/dist-packages/kivy/lang/builder.py", line 538, in apply
     rule_children=rule_children)
   File "/usr/local/lib/python3.7/dist-packages/kivy/lang/builder.py", line 659, in _apply_rule
     child, crule, rootrule, rule_children=rule_children)
   File "/usr/local/lib/python3.7/dist-packages/kivy/lang/builder.py", line 654, in _apply_rule
     child = cls(__no_builder=True)
   File "kivy/_event.pyx", line 188, in kivy._event.EventDispatcher.__cinit__
   File "kivy/properties.pyx", line 447, in kivy.properties.Property.link
   File "kivy/properties.pyx", line 632, in kivy.properties.NumericProperty.init_storage
   File "kivy/properties.pyx", line 418, in kivy.properties.Property.init_storage
   File "kivy/properties.pyx", line 655, in kivy.properties.NumericProperty.convert
   File "kivy/properties.pyx", line 665, in kivy.properties.NumericProperty.parse_str
 ValueError: could not convert string to float:
^C
[11]+  Exit 1                  python3 /home/fodderpod/Apps/FPCU-02/GUI/main.py

Я не могу опубликовать свой код, но это пример кода для прокрутки, который выдает ту же ошибку


__version__ = "1.0"

from kivy.app import App
from kivy.lang import Builder
from kivy.garden.scrolllabel import ScrollLabel

LOREM = """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nec arcu accumsan, lacinia libero sed, cursus nisi. Curabitur volutpat mauris id ornare finibus. Cras dignissim arcu viverra, bibendum est congue, tempor elit. Vivamus luctus sapien sapien, id tincidunt eros molestie vitae. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut commodo eget purus vel efficitur. Duis facilisis ex dolor, vel convallis odio pharetra quis. Vivamus eu suscipit tortor. Proin a tellus a nisl iaculis aliquam. Nam tristique ipsum dui, ut faucibus libero lacinia id. Pellentesque eget rhoncus justo, quis interdum eros. Suspendisse felis lorem, gravida in orci ac, auctor malesuada turpis. Fusce dapibus urna dolor, id viverra enim semper a. Proin dignissim neque quis ante commodo feugiat.
Duis dictum sagittis urna nec dapibus. Vestibulum ac elit vel nunc euismod lobortis. Vivamus sit amet tortor in diam consectetur ultrices vitae vulputate leo. Aenean vehicula orci leo, eget fringilla enim condimentum eget. Sed sapien lacus, vulputate nec ligula eget, luctus feugiat risus. Nullam ultricies quam ac metus imperdiet, eget scelerisque dolor commodo. Ut nec elementum orci. Cras massa lacus, consectetur varius est a, congue pulvinar magna. Proin nec sapien facilisis, tristique turpis vel, malesuada leo. Phasellus faucibus justo vel risus tristique, in laoreet ligula vestibulum. Vestibulum varius eget nibh nec convallis. Morbi eu diam at turpis mollis hendrerit. Aenean sed turpis lectus.
Suspendisse pharetra ligula nec faucibus mattis. Aliquam et felis eget augue efficitur aliquam viverra ut tellus. Aliquam sagittis ut sapien venenatis condimentum. Quisque in turpis ac nisi vehicula commodo vel porttitor erat. Maecenas lobortis, sapien dictum congue gravida, nulla urna ultricies lorem, at tincidunt ex arcu nec eros. Maecenas egestas a augue sit amet euismod. Praesent ut sapien metus. Curabitur lorem erat, consectetur quis rhoncus quis, tristique ac ligula. Suspendisse justo magna, cursus id mauris et, lacinia egestas neque.
Suspendisse bibendum sit amet est eget ullamcorper. Duis pellentesque tristique nisi. Donec id dolor eget arcu lobortis sollicitudin vel et justo. Vivamus vel risus eget felis condimentum tempus ac sed dui. Donec placerat risus quis metus auctor sagittis. Pellentesque vel sem dolor. Praesent erat eros, facilisis placerat ultrices et, interdum quis risus. Donec eleifend risus dapibus, laoreet felis ut, fermentum neque. Aenean purus elit, congue non tempus quis, dictum quis metus. Maecenas finibus rutrum bibendum. Ut vestibulum dapibus felis vel luctus. Aliquam vitae consequat eros, quis ultricies tortor. Quisque eu accumsan erat, id commodo nisi.
Etiam nec risus porttitor, placerat est et, facilisis diam. Etiam vel feugiat ligula. Aliquam at quam congue, lacinia velit nec, congue nibh. In varius quis elit vel sollicitudin. Vivamus molestie elementum ipsum et vehicula. Etiam non augue quis tortor ultrices maximus. Etiam vel blandit nibh. Nullam facilisis posuere erat vel mattis. Vestibulum mattis condimentum purus efficitur vehicula. Aliquam consequat interdum eros eu semper. Etiam feugiat, erat at tempor tincidunt, odio eros maximus sapien, sit amet lacinia nibh tortor quis dui. In hac habitasse platea dictumst.
"""

KV_EXAMPLE = """
#: import LOREM __main__.LOREM
BoxLayout:
    orientation: "vertical"
    Label:
        text: "ScrollLabel Demo"
        size_hint_y: None
        height: "48sp"

    ScrollLabel:
        id: sl
        text: LOREM * int(sl_count.value)
        font_size: sl_fontsize.value

    BoxLayout:
        size_hint_y: None
        height: "48sp"
        Label:
            text: "Text count"
            size_hint_x: None
            width: self.texture_size[0] + dp(48)
        Slider:
            id: sl_count
            min: 1
            max: 20
            value: 1
            step: 1

    BoxLayout:
        size_hint_y: None
        height: "48sp"
        Label:
            text: "Font size"
            size_hint_x: None
            width: self.texture_size[0] + dp(48)
        Slider:
            id: sl_fontsize
            min: sp(8)
            max: sp(100)
            value: sp(14)

    BoxLayout:
        size_hint_y: None
        height: "48sp"
        Label:
            text: "Alignment"
            size_hint_x: None
            width: self.texture_size[0] + dp(48)
        Button:
            text: "Left"
            on_press: sl.halign = "left"
        Button:
            text: "Center"
            on_press: sl.halign = "center"
        Button:
            text: "Right"
            on_press: sl.halign = "right"

"""


class TestScrollLabel(App):
    def build(self):
        return Builder.load_string(KV_EXAMPLE)

if __name__ == "__main__":
    TestScrollLabel().run()

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Я отправил PR с исправлениями, которые необходимы для kivy 1.10 +.
Пока он не принят (репозиторий простаивает в течение последних 4 лет), вы можете получить фиксированную версию с здесь .

Вы также можете скопировать (и переименовать) __init__.py в своем проекте и просто импортировать ScrollLabel

0 голосов
/ 11 ноября 2019

Scrolllable выдает такую ​​же ошибку даже для самого простого примера

from kivy.app import App
from kivy.lang import Builder
from kivy.garden.scrolllabel import ScrollLabel

KV_EXAMPLE = """
ScrollLabel:
    text: "abc"
"""

class TestScrollLabel(App):
    def build(self):
        return Builder.load_string(KV_EXAMPLE)

if __name__ == "__main__":
    TestScrollLabel().run()

Следовательно, с этим должно быть что-то не так. Возможно, некоторая зависимость сломалась.


Обновление:

возможно, вы можете попытать счастья с помощью recycleview. Вам все еще нужно правильно определить размер этикетки. В настоящее время я использую фиксированную ширину, которая не может быть идеальной

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.core.window import Window

LOREM = """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nec arcu accumsan, lacinia libero sed, cursus nisi. Curabitur volutpat mauris id ornare finibus. Cras dignissim arcu viverra, bibendum est congue, tempor elit. Vivamus luctus sapien sapien, id tincidunt eros molestie vitae. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut commodo eget purus vel efficitur. Duis facilisis ex dolor, vel convallis odio pharetra quis. Vivamus eu suscipit tortor. Proin a tellus a nisl iaculis aliquam. Nam tristique ipsum dui, ut faucibus libero lacinia id. Pellentesque eget rhoncus justo, quis interdum eros. Suspendisse felis lorem, gravida in orci ac, auctor malesuada turpis. Fusce dapibus urna dolor, id viverra enim semper a. Proin dignissim neque quis ante commodo feugiat.
Duis dictum sagittis urna nec dapibus. Vestibulum ac elit vel nunc euismod lobortis. Vivamus sit amet tortor in diam consectetur ultrices vitae vulputate leo. Aenean vehicula orci leo, eget fringilla enim condimentum eget. Sed sapien lacus, vulputate nec ligula eget, luctus feugiat risus. Nullam ultricies quam ac metus imperdiet, eget scelerisque dolor commodo. Ut nec elementum orci. Cras massa lacus, consectetur varius est a, congue pulvinar magna. Proin nec sapien facilisis, tristique turpis vel, malesuada leo. Phasellus faucibus justo vel risus tristique, in laoreet ligula vestibulum. Vestibulum varius eget nibh nec convallis. Morbi eu diam at turpis mollis hendrerit. Aenean sed turpis lectus.
Suspendisse pharetra ligula nec faucibus mattis. Aliquam et felis eget augue efficitur aliquam viverra ut tellus. Aliquam sagittis ut sapien venenatis condimentum. Quisque in turpis ac nisi vehicula commodo vel porttitor erat. Maecenas lobortis, sapien dictum congue gravida, nulla urna ultricies lorem, at tincidunt ex arcu nec eros. Maecenas egestas a augue sit amet euismod. Praesent ut sapien metus. Curabitur lorem erat, consectetur quis rhoncus quis, tristique ac ligula. Suspendisse justo magna, cursus id mauris et, lacinia egestas neque.
Suspendisse bibendum sit amet est eget ullamcorper. Duis pellentesque tristique nisi. Donec id dolor eget arcu lobortis sollicitudin vel et justo. Vivamus vel risus eget felis condimentum tempus ac sed dui. Donec placerat risus quis metus auctor sagittis. Pellentesque vel sem dolor. Praesent erat eros, facilisis placerat ultrices et, interdum quis risus. Donec eleifend risus dapibus, laoreet felis ut, fermentum neque. Aenean purus elit, congue non tempus quis, dictum quis metus. Maecenas finibus rutrum bibendum. Ut vestibulum dapibus felis vel luctus. Aliquam vitae consequat eros, quis ultricies tortor. Quisque eu accumsan erat, id commodo nisi.
Etiam nec risus porttitor, placerat est et, facilisis diam. Etiam vel feugiat ligula. Aliquam at quam congue, lacinia velit nec, congue nibh. In varius quis elit vel sollicitudin. Vivamus molestie elementum ipsum et vehicula. Etiam non augue quis tortor ultrices maximus. Etiam vel blandit nibh. Nullam facilisis posuere erat vel mattis. Vestibulum mattis condimentum purus efficitur vehicula. Aliquam consequat interdum eros eu semper. Etiam feugiat, erat at tempor tincidunt, odio eros maximus sapien, sit amet lacinia nibh tortor quis dui. In hac habitasse platea dictumst.
"""


Builder.load_string('''
#: import window __main__.Window
<RV>:
    viewclass: 'LabelLong'
    RecycleBoxLayout:
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'

<LabelLong@Label>:
    text_size: 800, None
    size: self.texture_size
''')

class RV(RecycleView):
    def __init__(self, **kwargs):
        super(RV, self).__init__(**kwargs)
        self.data = [{'text': LOREM} for x in range(100)]


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

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