Kivy Label和Popup +长文本

时间:2017-03-08 16:01:22

标签: python popup label kivy

所以我试图在Popup中显示一些长文本。如果Popup的高度可以根据文本的长度而改变,那将是理想的。但这不是我唯一的问题,我试图在没有使用此代码更改大小的情况下实现此目的

    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使用标签的方式感到困惑。

3 个答案:

答案 0 :(得分:3)

document.bind(size=document.setter('text_size'))

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

boxl.add_widget(boxl2)

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

enter image description here

另一方面,您为Button s本身设置了它,这使您认为布局本身已更改。 (它不是。)修复它,例如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中的实施,这将使其有效。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

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

<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
  • 了解它如何水平增长
  • 您可以通过更改弹出窗口的宽度来更改弹出窗口的宽度。