Comment puis-je définir la position (x, y des coordonnées) d'une disposition de grille à Kivy?
Question
J'ai remarqué que lorsque vous fabriquez des boutons à l'aide de la disposition de la grille dans Kivy, ils sont créés à (0,0) et déplacez-vous sur un certain nombre d'espaces en fonction de la longueur et de la largeur des boutons précédents. Cependant, j'aimerais avoir une grille 3x4 au milieu du bas de l'écran.
Je l'ai jusqu'à présent:
import kivy
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.uix.button import Button
class CalcApp(App):
def build(self):
layout = GridLayout(cols=3, row_force_default=True, row_default_height=50)
layout.add_widget(Button(text='1', size_hint_x=None, width=100))
layout.add_widget(Button(text='2', size_hint_x=None, width=100))
layout.add_widget(Button(text='3', size_hint_x=None, width=100))
layout.add_widget(Button(text='4', size_hint_x=None, width=100))
layout.add_widget(Button(text='5', size_hint_x=None, width=100))
layout.add_widget(Button(text='2', size_hint_x=None, width=100))
layout.add_widget(Button(text='6', size_hint_x=None, width=100))
layout.add_widget(Button(text='7', size_hint_x=None, width=100))
layout.add_widget(Button(text='8', size_hint_x=None, width=100))
layout.add_widget(Button(text='9', size_hint_x=None, width=100))
layout.add_widget(Button(text='0', size_hint_x=None, width=100))
layout.add_widget(Button(text='Enter', size_hint_x=None, width=100))
return layout
CalcApp().run()
Alors, comment puis-je déplacer la position?
La solution
import kivy
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.uix.button import Button
class CalcApp(App):
def build(self):
layout = GridLayout(cols=3, row_force_default=True, row_default_height=50,
pos_hint={'center_x':.5} , size_hint=(None, None))
# ^ position grid in mid horizontally, ^ make grid use custom
# size.
# Bind the size of the gridlayout of to it's minimum_size(calculated
# by children size)
layout.bind(minimum_size = layout.setter('size'))
# bind the top of the grid to it's height'
layout.bind(height = layout.setter('top'))
for x in (1, 2, 3, 4, 5, 2, 6, 7, 8, 9, 0):
layout.add_widget(Button(text=str(x), size_hint_x=None, width=100))
layout.add_widget(Button(text='Enter', size_hint_x=None, width=100))
return layout
CalcApp().run()
Le même code à l'aide de KV Lang ::
import kivy
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.lang import Builder
Builder.load_string('''
# a template Butt of type Button
[Butt@Button]
# ctx.'attribute_name' is used to access the
# attributes defined in the instance of Butt.
text: ctx.text
# below vars are constant for every instance of Butt
size_hint_x: None
width: 100
<CalcApp>:
cols: 3
row_force_default: True
row_default_height: 50
pos_hint: {'center_x':.5}
size_hint: (None, None)
# size is updated whenever minimum_size is.
size: self.minimum_size
# top is updated whenever height is.
top: self.height
Butt:
text: '1'
Butt:
text: '2'
Butt:
text: '3'
Butt:
text: '4'
Butt:
text: '5'
Butt:
text: '2'
Butt:
text: '6'
Butt:
text: '7'
Butt:
text: '8'
Butt:
text: '9'
Butt:
text: '0'
Butt:
text: 'Enter'
''')
class CalcApp(App, GridLayout):
def build(self):
return self
CalcApp().run()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow