2015-10-20 4 views
2

Мне было интересно, получилось ли получить объяснение того, как size_hint работает в Kivy. По моему мнению, это относительный масштаб от виджета до его родительского макета. Я попытался следующий код:Нужна помощь в понимании 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 и размера и заканчиваются очень похожими результатами. Что мне не хватает или не понимаю?

ответ

1

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

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

Однако, вы установили size x и size_hint x во всех случаях.

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

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 
+0

Я просто попытался это снова, и это не делает разницы. –

+1

Ugh Я чувствую себя идиотом, у меня был еще один виджет, который в верхней части класса, который я забыл, и в него не включался size_hint. Поскольку я не использовал size_hint для всех, он работал неправильно. –