Как динамически изменить размер ярлыка в киве без атрибута размера - PullRequest
0 голосов
/ 13 октября 2018

Итак, я понимаю, что вы обычно можете использовать self (=) (:) texture_size (py, kv), но все мои виджеты основаны на screen (только root) или size_hint.Я делаю это специально для кроссплатформенного графического интерфейса.Я открываю его на своем Android, и текст либо слишком мал, либо выходит за пределы экрана. Я не хочу оборачивать его только изменением размера.

Какие свойства метки можно установить, чтобы она автоматически настраивала шрифт для заполнениявысота и ширина родительского элемента (которые явно не определены)?

Текст на следующих этикетках печатается вместо шрифта по умолчанию, равного 14.

Пример:

https://pastebin.com/95qA44QD

code

1 Ответ

0 голосов
/ 16 октября 2018

Вы действительно должны следовать предложению @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())

Проще говоря, сохраните ссылки на вещи, которые вы хотите динамически настроить, добавьте привязку к вызову do_resize() всякий раз, когда размер вашего RootWidget изменяется, и вставьте туда код, чтобы внести необходимые изменения.Обратите внимание, что метод do_resize будет вызван на первом экране RootWidget.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...