2017-01-14 6 views
0

В настоящее время я создаю очень простое графическое приложение, которому нужно несколько кнопок слева (в узкой области) и диаграмма matplotlib справа (более широкий). Я не сталкивался с Python ГПИ, но я решил пойти с Kivy и пытался что-то вроде этого:Настройка ширины столбца сетки в GridLayout от Kivy?

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.button import Button 

class MyApp(App): 

    def build(self): 
     layout = GridLayout(cols=2) 
     inLayout = GridLayout(rows=3) 

     inLayout.add_widget(Button(text='Function 1', width = 50)) 
     inLayout.add_widget(Button(text='Function 2', width = 50)) 
     inLayout.add_widget(Button(text='Function 3', width = 50)) 

     layout.add_widget(inLayout) 
     layout.add_widget(Button(text='Chart pane')) 

     return layout 


if __name__ == '__main__': 
    MyApp().run() 

Поскольку кнопки являются только вещи должны были быть расположены в левой части окна, я подумал, что, возможно изменение размеров всех из них сужение всей панели, но это не так. Есть ли способ сделать это или сделать ячейки в GridLayout всегда должен быть того же размера, несмотря ни на что? Если да, существует ли аналогичная схема в Киви, которая позволила бы такое изменение?

ответ

1

Вы должны установить size_hint объект GridLayout детей. В этом случае вам нужно изменить объект inLayout, первый ребенок экземпляра layout. Чтобы кнопка всегда размер 0,2 ширины свободного пространства, установите его в (0.2, 1):

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.button import Button 

class MyApp(App): 

    def build(self): 
     layout = GridLayout(cols=2) 
     inLayout = GridLayout(rows=3, size_hint=(0.2, 1)) 

     inLayout.add_widget(Button(text='Function 1')) 
     inLayout.add_widget(Button(text='Function 2')) 
     inLayout.add_widget(Button(text='Function 3')) 

     layout.add_widget(inLayout) 
     layout.add_widget(Button(text='Chart pane')) 

     return layout 


if __name__ == '__main__': 
    MyApp().run() 

Чтобы иметь ширину фиксированного размера установите size_hint в (None, 1) и установить `ширина» свойство:

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.button import Button 

class MyApp(App): 

    def build(self): 
     layout = GridLayout(cols=2) 
     inLayout = GridLayout(rows=3, width=100, size_hint=(None, 1)) 

     inLayout.add_widget(Button(text='Function 1')) 
     inLayout.add_widget(Button(text='Function 2')) 
     inLayout.add_widget(Button(text='Function 3')) 

     layout.add_widget(inLayout) 
     layout.add_widget(Button(text='Chart pane')) 

     return layout 


if __name__ == '__main__': 
    MyApp().run()