Kivy弹出式文本包装未按预期工作

2024-04-26 20:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个函数,触发弹出窗口,有一个消息和一个关闭按钮在屏幕上,但我似乎不能得到文本包装正确。当前文本保持在100 x 100框内(默认大小)。但是,这个按钮的伸缩性很好,所以我不知道我做错了什么。做self.text\u大小= 自身尺寸在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()

Tags: 函数text文本txtboxadd消息close
2条回答

您可以使用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的属性相同。你知道吗

你可以用label.texture_size来做。在使用texture_size之前,只需调用label.texture_update()。你知道吗

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()

希望你能用它来达到你的目的。你知道吗

相关问题 更多 >