【问题标题】:Kivy Popup Text Wrapping Not Working As ExpectedKivy 弹出式文本换行无法按预期工作
【发布时间】:2019-01-01 21:19:25
【问题描述】:

我正在尝试编写一个函数来触发一个弹出窗口,该弹出窗口在屏幕上显示一条消息和一个关闭按钮,但是我似乎无法让文本正确换行。目前,文本保持在 100 x 100 的框内(默认大小)。但是,该按钮确实可以正确缩放,所以我对自己做错了什么感到困惑。执行 self.text_size = self.size 在 kv 语言中似乎可以正常工作,但在普通 Python 中却不行?

def default_popup(text: str, title: str = 'Warning') -> None:
    err_box = BoxLayout(orientation = 'vertical')

    err_txt = Label(text = text, font_size = 15)
    err_txt.text_size = err_txt.size
    err_box.add_widget(err_txt)

    close_button = Button(text = "Close")
    err_box.add_widget(close_button)

    err = Popup(title = title, content = err_box, size_hint = (0.6, 0.4))

    close_button.bind(on_release = err.dismiss)
    err.open()

【问题讨论】:

    标签: python popup label kivy


    【解决方案1】:

    您可以使用CoreLabel 来计算所需的大小。比如:

    text_tmp = CoreLabel(text=text, font_size=15)
    text_tmp.refresh()
    err_txt = Label(text = text, font_size = 15, size_hint=(None, None), size=text_tmp.size))
    

    只需确保CoreLabel 的属性与Label 相同。

    【讨论】:

      【解决方案2】:

      您可以使用label.texture_size 完成此操作。您只需拨打label.texture_update() 即可使用texture_size

      err_txt.texture_update()
      err_txt.text_size = err_txt.size
      

      我会根据间距、填充、文本等计算弹出窗口大小:

      def default_popup(text: str, title: str = 'Warning') -> None:
         content = BoxLayout(orientation='vertical', padding=10, spacing=10)
         label = Label(text=text, halign='left', valign='center', markup=True)
         # to resize and get texture_size
         label.texture_update()
         close_button = Button(text='Close', 
                                 size_hint=(None, None),
                                 size=(100, 45),
                                 pos_hint= {'right': 1}
                                 )
         content.add_widget(label)
         content.add_widget(close_button)
         popup = Popup(
                  title=title,
                  content=content,
                  size_hint=(None, None),
                  # auto calculate size 
                  size = [a+b+c*2 for a,b,c in zip(label.texture_size, [dp(120),dp(120)], [content.padding[0], content.spacing])],
                  auto_dismiss=True,
              )
         close_button.bind(on_press=popup.dismiss)
         popup.open()
      

      希望您可以将其用于您的目的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-12
        相关资源
        最近更新 更多