所以我正在开发一个基于kivy的应用程序,我希望能够滚动数千行文本。我开始尝试使用基本的scrollview,但是当你有大量的文本时,这根本不起作用(据我所知)。事实上,当我创建一个非常大的标签时,它往往根本不会渲染。
然后我尝试创建自己的小部件来滚动文本,基本上制作一个标签,显示我想要显示的整个文本的子集,然后遍历这些行,所以就像在终端中滚动一样。我现在遇到的问题是我无法弄清楚如何让标签在同一个地方保持相同的大小。我设置了size和size_hint,它们都不起作用。 text_size似乎有点工作,但我有一个问题,文本根据行长度水平跳转,有时似乎标签居中于我设置的x位置,而不是使该位置左侧边缘。我已经尝试明确地左对齐文本也没有效果。我试图在浮动布局中这样做。
如果有人解释我如何用kivy滚动大量文本,我将非常感激。感谢
编辑:添加一些代码
Label:
id: scroll_label_text
font_size: 18
text: "log here"
x:800
这是我用来显示我要滚动的文字
的标签的kv文件log_text = ObjectProperty(Label)
scroll_down = ObjectProperty(Button)
scroll_up = ObjectProperty(Button)
scrollpos = 0
def __init__(self, log, **kwargs):
super(Reader,self).__init__()
self.scroll_down.bind(on_press=self.scroll)
self.scroll_up.bind(on_press=self.scroll)
self.log_text.y = self.scroll_down.height*2
self.log_text.text_size = (None,300)
self.log_text.shorten = True
所以我只需更改标签中显示的文字切片就可以上下滚动按钮。
我遇到的问题是我不能将标签留在屏幕的左侧。它似乎以“x”设置为中心(尽管数字并不完全表示),因此根据线条长度,纹理大小和位置会发生变化。
答案 0 :(得分:0)
我认为你应该在github上尝试thopiekar的建议:https://github.com/openBergisch/kivy-widget-playground/issues/1
使用ScrollView内部的MultiLineLabel,您的问题应该得到解决。
答案 1 :(得分:0)
['238', 'NEO Sports']
这很有效,但如果将text属性设置为文件内容,则应手动处理<StackLayout>:
id:rootpane
textpane:textpane
scroll:scroll
direction:'tb-lr'
size_hint:(None, None)
size:(480, 854)
pos:self.parent.pos
ScrollView:
id:scroll
size_hint:(None, None)
size:rootpane.size
#do_scroll_x:False
#do_scroll_y:False
bar_color:(0, 0, 0, 0.4)
bar_inactiv_color:(0, 0, 0.7, 0.4)
bar_margin:2
bar_width:8
#on_scroll_x:textpane.focus = True
#on_scroll_y:textpane.focus = True
TextInput:
size_hint:(None, None)
id:textpane
text:''
on_text:self.y = self.minimum_height
的大小调整。最后一行显示了textinput
属性事件的方式。