Kivy中TextInput的ScrollView实现

9

我有一个函数(如下所示),其中使用了弹出窗口和TextInput来显示一些文本。在大多数情况下,文本内容都比弹出窗口大,因此需要滚动。如果没有ScrollView,我需要依靠键盘箭头键来滚动,并尝试实现ScrollView,以便可以使用鼠标滚轮进行滚动。但问题是它似乎不起作用,有什么想法为什么会这样?

def dispPopup(display_text):                                                                     
    root = ScrollView(size_hint=(0.8, 0.5))
    root.add_widget(TextInput(text= display_text, , size_hint=(0.8, 0.5)))
    popup = Popup(title='Search Result',
            content= root, size_hint=(0.8, 1), pos_hint={'right': 1}) 
    popup.open()

谢谢

1个回答

13

只有存在可滚动的内容,ScrollView才会进行滚动。

你正在向ScrollView添加一个Textinput,但是将Textinput的size_hint设置为.8,.5(即它的父级ScrollView的80%宽度和50%高度),因此没有可滚动的内容。

要垂直滚动,您应该将TextInput的宽度设置为其父级ScrollView的宽度,并将高度设置为较大者,即ScrollView的高度或行数* line_height。

在kv中:

ScrollView:
    id: scrlv
    TextInput:
        text: disp_text
        size_hint: 1, None
        height: max( (len(self._lines)+1) * self.line_height, scrlv.height)

TextInput会根据其行数或ScrollView高度或字体大小/样式(更改line_height)动态增长。

更新:

从1.8.0开始,您可以简单地执行以下操作:

height: max(self.minimum_height, scrlv.height)

谢谢,那个方法可行,但我必须添加 size_hint_y: None 到 textinput。 - Crust3
是的,您需要将size_hint_y设置为“None”,我忘了提到您需要相应地设置size_hint。已更新答案中的示例以反映应如何使用size_hint。 - qua-non
@qua-non 我正在尝试为多行文本输入框添加滚动条,但是这段代码 http://dpaste.com/hold/1281777/ 实际上为文本输入框对象提供了滚动条,而不是其内部的内容。有什么建议可以让我为文本输入框的内容使用滚动条吗? - Aamir Rind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接