У меня есть виджет (W2), сделанный из других виджетов (W1).У каждого есть соответствующий файл .kv, как показано ниже.Запустив main.py, я ожидаю увидеть черный фон с двумя метками, расположенными вертикально.Вместо этого я ставлю обе метки друг на друга, поэтому что-то пошло не так.
kivy.factory.FactoryException: Unknown class <W1>
Поэтому я подумал: «Может быть, мне следует импортировать w1.py в w2.py, хотя он явно не используется вфайл py? Это ... вроде работает. Я получаю обе метки друг над другом, как на следующем рисунке.
Чтоя делаю неправильно? Как правильно написать виджет, который, как ожидается, будет импортирован / включен другим виджетом? И как правильно импортировать его?
Я пытался использовать Builder.load_file()
в .pyфайл и просто импортирует файл .py, но у которого были похожие результаты.
w1.py:
import kivy
from kivy.properties import StringProperty
from kivy.uix.widget import Widget
kivy.require('1.10.0')
class W1(Widget):
text = StringProperty('default')
def __init__(self, **kwargs):
super(W1, self).__init__(**kwargs)
w1.kv:
#:kivy 1.10.0
<W1>:
text:
Label:
text: root.text
w2.py:
import kivy from kivy.uix.boxlayout import BoxLayout
# from w1 import W1 # added this to get a working, but the incorrect layout
kivy.require('1.10.0')
class W2(BoxLayout):
def __init__(self, **kwargs):
super(W2, self).__init__(**kwargs)
w2.kv:
#:kivy 1.10.0
#:include w1.kv
<W2>:
orientation: 'vertical'
W1:
text: 'w1.1'
W1:
text: 'w1.2'
main.py:
import kivy
from w2 import W2
from kivy.app import App
kivy.require('1.10.0')
class mainApp(App):
def build(self):
pass
if __name__ == '__main__':
mainApp().run()
main.kv:
#:kivy 1.10.0
#:include w2.kv
W2:
РЕДАКТИРОВАТЬ Перекрытие устранено, хотя, возможно, нетправильно. У меня было W1 наследовать от BoxLayout, а не Widget, с мысльючто, возможно, в базовом классе Widget отсутствовало свойство минимальной высоты / ширины.
Я до сих пор не уверен, что такое «правильный» способ обработки импорта виджета с парным файлом .kv, илиименно поэтому я получаю перекрывающиеся виджеты, когда я наследую от Widget;только домыслы.