Нужна помощь в понимании size_hint в киви

Мне было интересно, могу ли я получить объяснение того, как size_hint работает в Kivy. Насколько я понимаю, это относительный масштаб от виджета до его родительского макета. Я попробовал следующий код:

    class TestFrame(GridLayout):
        def __init__(self, **kwargs):
            GridLayout.__init__(self, **kwargs)
            self.rows = 1
            self.add_widget(Label(text='test_num', size=(100, 25), size_hint=(.10, None)))
            self.add_widget(Label(text='test_txt', size=(100, 25), size_hint=(.75, None)))
            self.add_widget(Button(text='test_btn', size=(100, 25), size_hint=(.15, None)))

Это то, что я ожидаю:

    |----------------------------------------------------------------------|
    |Test_num :                       Test_txt                :  Test_btn  |

Вместо этого это результат:

    |----------------------------------------------------------------------|
    |                                    Test_num :  Test_txt   : Test_btn |

Я играл с различными комбинациями size_hint и size и в итоге получил очень похожие результаты. Что я упускаю или не понимаю?

1 ответ

Решение

Насколько я знаю, использование size_hint А ТАКЖЕ size несовместимы, когда вы устанавливаете их для одного и того же атрибута, как при установке x или y для обоих. Используйте один или другой. Если вы думаете об этом, это имеет смысл. С size, вы явно устанавливаете размер для виджета, и с size_hintВы также явно устанавливаете размер для виджета, просто по-другому, по сравнению с родительским виджетом. Так что, если вы используете оба для одного и того же атрибута, x или y, они будут конфликтовать.

Исключения здесь, вероятно, когда у вас есть, например, size_hint_y установите None, как вы делаете выше, а затем укажите size для тебя. Или если вы установите size_hint_x Нет, а только указан size для х.

Тем не менее, выше вы установили size х, а size_hint х во всех случаях.

Итак: это должно быть хорошо

size_hint=(None, .5), width=100
size_hint=(.5, None), height=100

Это будет конфликтовать

size_hint=(.6, .5), size=(34, 66)
size_hint=(None, 55), height=80
Другие вопросы по тегам