ScrollLabel产生ValueError

时间:2019-11-11 05:49:03

标签: python python-3.x kivy kivy-language

大家好,我是这个网站的新手,所以如果我做错了事,我会提前道歉,来自kivy-garden的ScrollLabel在我尝试使用它时给我一个错误 基本上,我尝试制作控制台日志,我需要能够在填充文本框时滚动它,我尝试了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 :(得分:0)

即使对于最基本的示例,

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()

答案 1 :(得分:0)

我提交了PR版本,其中包含kivy 1.10+所需的修复程序。
在接受之前(存储库过去4年一直处于闲置状态),您可以从here获取固定版本。

您还可以在项目中复制(并重命名)__init__.py并仅导入ScrollLabel