2015-12-20 2 views
1

Я хотел бы построить сетку, где некоторые столбцы имеют фиксированную ширину (чтобы содержать изображение), в то время как другие должны взять доступное пространство. Это моя текущая ситуация (последняя колонка):Kivy grid layout фиксированная ширина столбца для некоторых столбцов

kivy grid layout example

Как вы можете видеть на синем фоне, колонки слишком велики для изображения. Тем не менее, так как есть больше столбцов, размер которых должен быть относительно доступной ширины, я не могу использовать свойство col_force_default макета сетки.

Так можно ли исправить ширину некоторых столбцов, пока остальные столбцы занимают все свободное пространство?

Вот отрывок из моего файла Kv:

<[email protected]> 
    exRepetitionsRound: ex_repetitions_round 
    exRepetitionsText: ex_repetitions_ti 
    exNameLabel: ex_name_label 
    exDeleteBtn:ex_delete_btn 
    exUpBtn:ex_up_btn 
    exDownBtn: ex_down_btn 


    TextInput: 
     id: ex_repetitions_round 
     multiline:False 
     size_hint:(0.25,1) 
     padding:(10,10,10,10) 

    TextInput: 
     size_hint:(0.25,1) 
     id: ex_repetitions_ti 
     multiline:False 
     padding:(10,10,10,10) 

    Label: 
     size_hint:(0.5,1) 
     id: ex_name_label 
     text:'' 


    Button: 
     id:ex_delete_btn 
     background_normal:'' 
     background_pressed:'' 
     background_disabled:'' 
     background_color:(0,0,1,1) 
     padding:(10,10) 

     Image: 
      source:'data/image/delete.png' 

      size: (40,40) 
      y: self.parent.y + self.parent.height + 20 
      x: self.parent.x + 15 
      allow_stretch: False 
      keep_ratio: True 

    Button: 
     id:ex_up_btn 
     background_normal:'' 
     background_pressed:'' 
     background_disabled:'' 
     background_color:(0,0,0,0) 

     Image: 
      source:'data/image/arrow_up.png' 
      y: self.parent.y + self.parent.height + 20 
      x: self.parent.x + 20 
      size: '40dp', '40dp' 
      allow_stretch: True 
    Button: 
     id:ex_down_btn 
     background_normal:'' 
     background_pressed:'' 
     background_disabled:'' 
     background_color:(0,0,0,0) 

     Image: 
      source:'data/image/arrow_down.png' 
      y: self.parent.y + self.parent.height + 20 
      x: self.parent.x + 15 
      size: 40, 40 
      allow_stretch: True 

Как вы можете видеть, я экспериментировал немного со значениями размера, но никаких результатов до сих пор. Спасибо за помощь!

ответ

1

Я решил это, добавив эти кнопки во вложенную схему сетки и установив там фиксированную ширину столбца. Я хотел бы предотвратить макеты раскроя больше, чем необходимо, но я не мог найти более чистого решения. Если кто-то знает лучший ответ, не стесняйтесь публиковать его, я оставлю его открытым.

<[email protected]> 
    exRepetitionsRound: ex_repetitions_round 
    exRepetitionsText: ex_repetitions_ti 
    exNameLabel: ex_name_label 
    exDeleteBtn:ex_delete_btn 
    exUpBtn:ex_up_btn 
    exDownBtn: ex_down_btn 


    TextInput: 
     id: ex_repetitions_round 
     multiline:False 
     size_hint:(0.2,1) 
     padding:(10,10,10,10) 

    TextInput: 
     size_hint:(0.2,1) 
     id: ex_repetitions_ti 
     multiline:False 
     padding:(10,10,10,10) 

    Label: 
     size_hint:(0.3,1) 
     id: ex_name_label 
     text:'' 

    GridLayout: 
     size_hint:(0.3,1) 
     cols:3 
     rows:1 
     col_default_width:50 
     col_force_default:True 
     spacing:10,10 
     Button: 
      id:ex_delete_btn 
      background_normal:'' 
      background_pressed:'' 
      background_disabled:'' 
      background_color:(0,0,0,0) 
      size:50,50 
      Image: 
       source:'data/image/delete.png' 
       size:(50,50) 
       y: self.parent.y 
       x: self.parent.x 
       allow_stretch: True 
       keep_ratio: True 
     Button: 
      id:ex_up_btn 
      background_normal:'' 
      background_pressed:'' 
      background_disabled:'' 
      background_color:(0,0,0,0) 
      size:50,50 
      Image: 
       source:'data/image/arrow_up.png' 
       size:(50,50) 
       y: self.parent.y 
       x: self.parent.x 
       allow_stretch: True 
       keep_ratio: True 


     Button: 
      id:ex_down_btn 
      background_normal:'' 
      background_pressed:'' 
      background_disabled:'' 
      background_color:(0,0,0,0) 
      size:50,50 
      Image: 
       source:'data/image/arrow_down.png' 
       y: self.parent.y 
       x: self.parent.x 
       size:50,50 
       allow_stretch: True