Таким образом, я использовал 'для l oop', чтобы создать несколько прямоугольных angular виджетов (например, box
) в строке, где я планирую поместить дополнительные элементы внутри. Я подумал, что было бы хорошо, чтобы эти виджеты были разнесены и имели цвет фона. Я в течение недели изучаю все (включая «связывание»), но у меня все еще нет результатов, которых я хочу. По сути, все виджеты (например, box
) находятся в функции с именем def test(self):
и вызывают ее в __init__
для создания строк виджетов. Я использую with self.canvas.before
и self.rec = Rectangle(size=box.size, pos=box.pos)
и def redraw(self,*args):
технику ... но все, что я получаю, это маленькая коробка в левом нижнем углу.
Пожалуйста, посмотрите и скажите мне, что мне не хватает , Я упросту код:
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.graphics.context_instructions import Color
from kivy.graphics.vertex_instructions import Rectangle
class TestWindow(BoxLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.test()
self.redraw
def test(self):
for i in range(3):
box = BoxLayout(size_hint=(None,None), size=(300,50), pos=self.pos)
with box.canvas.before:
Color(1,0,0,0.5)
self.rec = Rectangle(size=box.size, pos=box.pos)
self.bind(size=self.redraw,pos=self.redraw)
bt = Button(text='world')
box.add_widget(bt)
self.ids.stack.add_widget(box)
def redraw(self, *args):
self.rec.size = self.rec.size
self.rec.pos = self.rec.pos
class TestApp(App):
def build(self):
return TestWindow()
if __name__=='__main__':
TestApp().run()```
```The kv file is:
<TestWindow>:
StackLayout:
id:stack
padding:10
spacing:10```
[the output...][1]
[1]: https://i.stack.imgur.com/EyElC.jpg