Kivy 标签和弹出窗口 + 长文本

Posted

技术标签:

【中文标题】Kivy 标签和弹出窗口 + 长文本【英文标题】:Kivy Label and Popup + long text 【发布时间】:2017-07-29 07:17:25 【问题描述】:

所以我试图在弹出窗口中显示一些长文本。如果弹出窗口的高度可以随文本长度而变化,那将是理想的。但这不是我唯一的问题,我试图在不使用此代码更改大小的情况下实现它

    boxl = uix.boxlayout.BoxLayout(orientation="vertical")
    boxl2 = uix.boxlayout.BoxLayout(orientation="horizontal")
    pop = Popup(title="Title", content=boxl, size_hint=(0.75,0.8))
    text = "Really long text"

    document = uix.label.Label(text=text,markup=True, valign='top')

    button = uix.button.Button(text='back', size_hint_y=None, height=40)
    button2 = uix.button.Button(text="Button Title", size_hint_y=None, height=40)
    button.bind(on_press=(lambda x:pop.dismiss()))
    button2.bind(on_press=(lambda x,data=data:(self.set_vorteil(data),pop.dismiss())))
    boxl.add_widget(document)

    boxl2.add_widget(button)
    boxl2.add_widget(button2)
    boxl.add_widget(boxl2)
    document.bind(size=document.setter('text_size'))
    pop.open()

有趣的是,我的文本被截断了,即使按钮之前有很大的可用空间。我该如何解决这个问题,甚至使它正确?我对 Kivy 使用标签的方式感到困惑。

【问题讨论】:

切断是什么意思?使用类似的代码我得到this @ODiogoSilva 太短,请使用更长的文本。 您能否在示例中提供导致问题的字符串大小? 【参考方案1】:
document.bind(size=document.setter('text_size'))

将文本区域限制为特定大小,即小部件本身的大小。它工作得很好,除了你这样做的事实:

boxl.add_widget(boxl2)

这是一件好事,但是您忘记设置 size_hint=(None, None) 和 BoxLayout 的特定大小,因此:

另一方面,您为Buttons 自己设置了它,这让您认为布局本身已更改。 (不是。)用例如修复它BoxLayout(size_hint=(None, None), size=<desired size>).

此外,这种方式并不是很好,因为它限制了用户,例如当移动布局太小时。我宁愿选择一个可滚动的标签:

from kivy.lang import Builder
from kivy.base import runTouchApp
runTouchApp(Builder.load_string('''
ScrollView:
    Label:
        size_hint_y: None
        text_size: (self.width, None)
        text: 'lorem ipsum dolor ' * 1000
        height: self.texture_size[1]
'''))

或在RecycleView 中实现它,这将使其高效。

【讨论】:

【参考方案2】:

LabelButton 小部件之间有这么多可用空间的原因是这两个 BoxLayout 小部件(boxlboxl2)实际上将空间分成两半(即使你没有注意到它)。如果您希望 Label 拥有所有空间,则需要设置 boxl2 小部件的高度:

boxl2 = BoxLayout(orientation="horizontal", size_hint_y=None, height=40)

这会将boxl2 小部件设置为与Button 小部件相同的高度

【讨论】:

【参考方案3】:

如果有人感兴趣,这是我根据其中的文本增长的弹出窗口的实现:

<NotificationPopup@Popup>
height: content_id.height + 50
width: '400dp'
size_hint: (None, None)

BoxLayout:
    orientation: 'vertical'
    id: content_id
    size_hint: (None, None)
    height: self.minimum_height + 25
    width: root.width - 25

    Label:
        size_hint_y: None
        height: self.texture_size[1]
        text_size: (self.width, None)
        text: 'A' * 400
        padding: (0, 10)

    Button:
        size_hint_y: None
        height: '40dp'
        text: 'ok'
通过更改文本长度来查看它是如何水平增长的 (text: 'A' * 400) 您可以通过更改弹出窗口的宽度来更改弹出窗口的宽度。

【讨论】:

以上是关于Kivy 标签和弹出窗口 + 长文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在Kivy的matplotlib图表上实现鼠标悬停数据标签弹出窗口

Kivy:弹出窗口只能有一个小部件作为内容

使窗口弹出和弹出屏幕边缘

更改 Kivy 中的弹出文本

Kivy 如何创建一个可根据内容调整大小的弹出窗口?

WPF FileFolderDialog 和弹出子窗口的一些问题