【问题标题】:How to dynamically resize label in kivy without size attribute如何在没有大小属性​​的kivy中动态调整标签大小
【发布时间】:2018-10-13 01:57:38
【问题描述】:

所以,我知道您通常可以只使用 self(=)(:)texture_size (py,kv),但我所有的小部件都基于屏幕(仅限 root)或 size_hint。我这样做是为了“跨平台”GUI。我在我的 android 上打开它,文本太小或超出屏幕我不想换行,只调整大小。

我可以设置 Label 的哪些属性,以便它自动调整字体以填充父级的高度和宽度(未明确定义)?

以下标签上的文本改为以默认字体大小 14 打印。

例子:

https://pastebin.com/95qA44QD

code

【问题讨论】:

标签: python python-3.x kivy


【解决方案1】:

你真的应该听从@eyllanesc 的建议。但这是一种做你想做的事情的方法(如果我正确地解释了你的问题):

from functools import partial

from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.app import runTouchApp
from kivy.uix.textinput import TextInput


class RootWidget(GridLayout):

    def __init__(self, **kwargs):
        # prevent override
        super(RootWidget, self).__init__(**kwargs)
        self.cols = 1
        self.email_label =  Label(
                color=(1, .5, .5, 1),
                text="Email:",
                size_hint=(1, 1)
            )
        self.add_widget(self.email_label)
        self.email = TextInput(
            text='',
            foreground_color=(1, .5, .5, 1),
            multiline=False,
            size_hint=(1, 1))
        self.add_widget(self.email)
        self.add_widget(
            Label(
                color=(1, .5, .5, 1),
                text="Password:",
                size_hint=(1, 1)))
        self.pw = TextInput(
            text='',
            foreground_color=(1, .5, .5, 1),
            multiline=False,
            password=True,
            size_hint=(1, 1))
        self.add_widget(self.pw)
        self.login = Button(
            color=(1, .5, .5, 1),
            background_color=(0, 0, 0, 1),
            text="Login",
            size_hint=(1, 4))
        self.add_widget(self.login)
        self.login.bind(
            on_press=partial(
                self.checkuser,
                self.email,
                self.pw))

        self.bind(size=self.do_resize)


    def checkuser(self, *args):
        pass

    def do_resize(self, rootWidgt, new_size):
        self.email_label.font_size = 0.025 * new_size[1]

if __name__ == '__main__':
    runTouchApp(RootWidget())

简单地说,保存对要动态调整的内容的引用,添加绑定以在调整 RootWidget 大小时调用 do_resize(),然后将代码放入其中以进行所需的调整。注意do_resize方法会在RootWidget第一次显示时被调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    相关资源
    最近更新 更多