KivyMD добавляет виджет к одному элементу / экрану MDBottomNavigation
Недавно я опубликовал сообщение о добавлении виджета индикатора выполнения на экран, но поскольку моя MDBottomNavigation содержится в одном экране, каждый раз, когда я переключаюсь на другой элемент в нижней навигации, индикатор выполнения остается. Итак, я хочу вместо этого добавить индикатор выполнения только к одному из элементов MDBottomNavigation, а не к другому 2. Вот мой код:
.py файл
class WindowManager(ScreenManager):
pass
class HomeScreen(Screen):
pass
class MyWorkouts(Screen):
pass
class RecommendedWorkouts(Screen):
pass
class AddWorkouts(Screen):
pass
class CreateNewWorkout(Screen):
pass
class AddNewGoal(Screen):
pass
class Goals(Screen):
pass
class Workout(MDApp):
dialog = None
PB = ObjectProperty(None)
def build(self):
return
def AddNewGoal_Dialog(self):
if not self.dialog:
self.dialog = MDDialog(
size_hint_x = 0.8,
size_hint_y = 1,
pos_hint = {'center_x': .5, 'center_y': .5},
radius = [10, 10, 10, 10],
title = 'Add New Goal',
auto_dismiss = False,
type = 'custom',
content_cls = AddNewGoal(),
buttons = [
MDFlatButton(
text = 'CANCEL', text_color = self.theme_cls.primary_color,
on_release = self.closeDialog),
MDRaisedButton(
text = 'CREATE', text_color = self.theme_cls.primary_color,
on_release = self.addNewGoal)
],
)
self.dialog.open()
def addNewGoal(self, inst):
progressbar = ProgressBar(
value = 50,
max = 100
)
self.root.ids.GoalsBN.add_widget(progressbar)
self.dialog.dismiss()
.kv файл
WindowManager:
transition: FadeTransition(duration = 1)
HomeScreen:
MyWorkouts:
RecommendedWorkouts:
AddWorkouts:
CreateNewWorkout:
AddNewGoal:
Goals:
<HomeScreen>
name: 'HomeScreen'
MDBottomNavigation:
MDBottomNavigationItem:
text: 'Workouts'
name: 'Workouts'
icon: 'weight-lifter'
FloatLayout:
canvas:
Color:
#rgba: 0.2, 0.4, 0.75, 0.8
rgba: 0, 0, 0.5, 0.9
Rectangle:
pos: self.pos
size: self.size
MDFillRoundFlatIconButton:
text: 'My Workouts'
text_color: 0, 0, 0, 1
font_size: '12sp'
icon: 'weight-lifter'
pos_hint: {'x': 0.15, 'top': 0.7}
size_hint: 0.7, 0.1
on_release:
app.root.current = 'MyWorkouts'
MDFillRoundFlatIconButton:
text: 'Recommended Workouts'
text_color: 0, 0, 0, 1
font_size: '12sp'
icon: 'weight-kilogram'
pos_hint: {'x': 0.15, 'top': 0.5}
size_hint: 0.7, 0.1
background_normal: 'white.jpg'
on_release:
app.root.current = 'RecommendedWorkouts'
GridLayout:
cols: 1
MDToolbar:
title: 'App Attack'
type: 'top'
#md_bg_color: app.theme_cls.accent_color
elevation: 10
MDBottomNavigationItem:
text: 'Goals'
id: 'GoalsBN'
name: 'GoalsBN'
icon: 'trending-up'
FloatLayout:
canvas:
Color:
#rgba: 0.2, 0.4, 0.75, 0.8
rgba: 0, 0, 0.5, 0.9
Rectangle:
pos: self.pos
size: self.size
GridLayout:
cols: 1
MDToolbar:
title: 'App Attack'
type: 'top'
#md_bg_color: app.theme_cls.accent_color
elevation: 10
right_action_items: [['plus-circle-outline', lambda x: app.AddNewGoal_Dialog()]]
MDBottomNavigationItem:
text: 'Profile'
name: 'Profile'
icon: 'account'
FloatLayout:
canvas:
Color:
rgba: 0, 0, 0.5, 0.9
Rectangle:
pos: self.pos
size: self.size
GridLayout:
cols: 1
MDToolbar:
title: 'App Attack'
type: 'top'
#md_bg_color: app.theme_cls.accent_color
elevation: 10
Строка в .py файла из
self.root.ids.GoalsBN.add_widget(progressbar)
это то место, где нужно сделать редактирование. Я знаю, что эта строка неправильная, я просто не знаю, как вызвать MDBottomNavigationItem, которому я дал идентификатор: GoalsBN. Помощь будет очень признательна!
1 ответ
Решение
Проблемы
- В файле kv идентификатор GoalsBN определяется как строка.
- ID: 'GoalsBN' определяется в Homescreen, но не определены в ScreenManager, WindowManager:.
Решения
- В файле kv id: не является строкой. Поэтому заменить идентификатор: "GoalsBN" с идентификатором: GoalsBN
- В файле kv добавьте id: homeScreen, а в скрипте Python добавьте ids.homeScreen в self.root.ids.GoalsBN.add_widget(индикатор выполнения)
Фрагменты
kv файл
WindowManager:
transition: FadeTransition(duration = 1)
HomeScreen:
id: homeScreen
MyWorkouts:
...
MDBottomNavigationItem:
text: 'Goals'
id: GoalsBN
...
main.py
def addNewGoal(self, inst):
progressbar = ProgressBar(
value=50,
max=100
)
self.root.ids.homeScreen.ids.GoalsBN.add_widget(progressbar)
self.dialog.dismiss()