Я борюсь с Kivy, чтобы заставить его правильно отображать кнопки. Я хочу создать сетку кнопок, созданных в для l oop и отображать их в сетке внутри RelativeLayout. Это приводит к тому, что кнопки складываются одна над другой. Пожалуйста, смотрите ниже:
Main.py:
import kivy
from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout
from kivy.lang.builder import Builder
from kivy.uix.button import Button
Builder.load_file('TopMenu.kv')
Builder.load_file('BottomMenu.kv')
Builder.load_file('Center.kv')
Builder.load_file('Left.kv')
class mainHolder(AnchorLayout):
pass
class MainApp(App):
def build(self):
self.title = "NAZWA APLIKACJI"
#return Label(text = "Hello, world")
return mainHolder()
if __name__ == '__main__':
MainApp().run()
Main.kv
<MainHolder>:
anchor_x: 'left'
anchor_y: 'top'
BoxLayout:
orientation: 'vertical'
#anchor_x: 'left'
#anchor_y: 'top'
TopMenu:
id: _top_menu
#size_hint: 1, 0.1
#height: 0, 1
canvas.before:
Color:
rgba:0.5, 0.5, 0.5, 0.5
Rectangle:
pos: self.pos
size: self.size
Center:
BottomMenu:
center.kv:
<Center@GridLayout>:
cols: 2
size_hint: 1, 1
Left:
Label:
text: 'prawa'
Слева. py:
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.button import Button
class Left(RelativeLayout):
def __init__(self, **kwargs):
super(RelativeLayout, self).__init__(**kwargs)
print("Left is alive!")
for i in range(0, 11):
print("Adding button: " + str(i))
but = Button(text="X" + str(i))
self.add_widget(but)
и, наконец, left.kv:
#:import Left Left
<Left>:
size_hint: 1.3, 1
pos_hint: 1, 1
Этот подход создает следующее: Я пытался изменить RelativeLayout на GridLayout , но затем кнопки выглядят примерно одинаково, с той разницей, что они находятся в самом нижнем левом углу, поэтому я думаю, что RelativeLayout - хороший способ начать располагать их в нужном месте.
Итак, я добавил вручную GridLayout внутри Left.kv, как показано ниже:
<Left>:
size_hint: 1.3, 1
pos_hint: 1, 1
GridLayout:
cols: 4
Button:
text: "t2"
Button:
text: "t2"
Button:
text: "t2"
Button:
text: "test"
И это прекрасно работает. Следуя этому, я создал другой класс, на этот раз GridLayout, но это не сработало вообще - извините, у меня больше нет кода, я удалил его, так как он был бесплодным. Кроме того, добавление GridLayout, как показано выше, не приводит к тому, что add_widget () добавляет его в нужное место. Ребята, вы можете мне помочь? Я серьезно расстроен этим, и Google не дает никакого разумного ответа. Я предполагаю, что это может быть неправильный подход с самого начала разработки этого приложения, но, честно говоря, я понятия не имею, каким может быть «хороший» момент.
Джон Андерсон, спасибо! Это работает как шарм. Я был так близко, но так далеко, я бы никогда этого не нашел. Ура! : -)