#python #kivy #kivy-language #kivymd
Вопрос:
Я только что взял python и kivy/kivymd на этой неделе, поэтому я борюсь с тем, что, я уверен, действительно является базовыми вещами.
Я пытаюсь создать карточку on_start, которая по большей части работает нормально, но мне также нужно установить высоту в значение minimum_height, а также установить pos_hint (две закомментированные строки, хотя, очевидно, в этом случае это не будет self.minimum_height; это было скопировано из моего файла .kv).
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.card import MDCard
class MainApp(MDApp):
def build(self):
self.theme_cls.primary_palette = "LightGreen"
self.theme_cls.primary_hue = "700"
return Builder.load_file("main.kv")
def on_start(self):
self.root.ids.main_grid.add_widget(MDCard(
size_hint_x = 1,
size_hint_y = None,
adaptive_height = True,
# height = self.minimum_height,
# pos_hint = {"center_x" = .5}
spacing = 5,
padding = 30,
elevation = 18,
ripple_behavior = True
))
MainApp().run()
Я понятия не имею, как назначить pos_hint таким образом, чтобы он не выдавал синтаксическую ошибку.
Для высоты я попытался установить
def on_start(self):
veg = self.root.ids.main_grid.add_widget(MDCard(
size_hint_x = 1,
size_hint_y = None,
adaptive_height = True,
# height = self.minimum_height,
# pos_hint = {"center_x" = .5}
spacing = 5,
padding = 30,
elevation = 18,
ripple_behavior = True
))
А затем добавила
veg.height = veg.minimum_height
Который возвращает
AttributeError: 'NoneType' object has no attribute 'minimum_height'
Все остальное работает отлично. Без этих двух установленных свойств я могу запустить его, и карта отображается просто отлично. Просто у него неправильный размер. Какого вклада он ожидает?
Ответ №1:
Свойство adaptive_height
не определено для MDCard
. У вас pos_hint
просто плохой синтаксис для словаря. Попробуйте изменить:
pos_hint = {"center_x" = .5}
Для:
pos_hint = {"center_x": .5}
В вашем коде the height = self.minimum_height
пытается установить height
MDCard
minimum_height
App
значение » из » в » из » ( self
находится MainApp
в этом методе). Более простым подходом было бы определить правило для этого MDCard
в kv
. подобный этому:
<MyMDCard>:
size_hint_x: 1
size_hint_y: None
height: self.minimum_height
И определить MyMDCard
как:
class MyMDCard(MDCard):
pass
Затем on_start()
метод становится:
def on_start(self):
self.root.ids.main_grid.add_widget(MyMDCard(
pos_hint = {"center_x": .5},
spacing=5,
padding=30,
elevation=18,
ripple_behavior=True
))