【问题标题】:Kivy Label and Popup + long textKivy 标签和弹出窗口 + 长文本
【发布时间】: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 太短,请使用更长的文本。
  • 您能否在示例中提供导致问题的字符串大小?

标签: python popup label kivy


【解决方案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)
      • 您可以通过更改弹出窗口的宽度来更改弹出窗口的宽度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 1970-01-01
        • 2020-05-31
        相关资源
        最近更新 更多