Я пытаюсь установить фон моего макета на следующем языке kv:
<RootWidget>:
Menu:
orientation: 'vertical'
Button:
text: 'btn1'
on_release: print('btn1')
Button:
text: 'btn'
on_release: print('btn2')
BoxLayout:
BoxLayout:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'main_background.png'
ToggleMenuButton:
on_release: root.toggle_state()
size_hint: None, None
size: 60, 60
background_color: 0, 0, 0, 0
Image:
size: self.parent.size
pos: self.parent.pos
allow_stretch: True
source: './data/images/white_menu.png'
И это мой код:
from kivy.app import App
from kivy.garden.navigationdrawer import NavigationDrawer
from layouts.menu import Menu
from layouts.menu import ToggleMenuButton
from layouts.content import Content
class RootWidget(NavigationDrawer):
pass
class MainApp(App):
def build(self):
self.root = RootWidget()
return self.root
if __name__ == '__main__':
MainApp().run()
Классы Menu и Content — это Kivy BoxLayout, ToggleMenuButton — это Kivy Button.
Когда я запускаю этот код, я получаю следующий экран:
Фон должен быть моим изображением, а не черным. Если я использую white_menu.png
в качестве фона, я также получаю черный фон. Но, если поставить следующий код:
BoxLayout:
orientation: 'vertical'
BoxLayout:
orientation: 'vertical'
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'main_background.png'
Как вы можете заметить внизу, изображение прозрачное, с 3 белыми прямоугольниками, но на основном макете изображение красное. Я знаю, что он красный, потому что код rgba, но почему изображение меняет свой цвет? Если поставить фон на canvas.after
работает корректно, свой фон вижу, а вот виджеты не вижу.
Подводя итог, хочется понять, что происходит? Почему я не вижу изменений на canvas.before
? Почему/как добавление цвета на мой холст меняет мое изображение?
Если я изменю RootWidget
на BoxLayout вместо NavigationDrawer, он будет работать правильно. Почему? Почему изменение холста дочернего элемента дочернего элемента NavigationDrawer
не работает?