KivyMD尝试将小部件(进度条)的实例添加到屏幕

时间:2020-07-27 13:32:56

标签: python kivy kivymd

.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 Workout(MDApp):
    dialog = 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()
    HomeScreen().add_widget(progressbar)

.kv文件

MDToolbar:
    title: 'App Attack'
    type: 'top'
    right_action_items: [['plus', lambda x: app.AddNewGoal_Dialog()]]
    elevation: 10

因此,当我按工具栏上的正确操作项时,它将创建对话框。然后,我想要它,所以当我按下对话框上的CREATE Raised按钮时,它将向主屏幕添加一个小部件(进度条)。我没有收到错误代码。而是,当释放按钮时,什么也没有发生。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的addNewGoal()方法中的行:

HomeScreen().add_widget(progressbar)

创建一个HomeScreen的新实例,并将progressbar添加到该实例。不幸的是,HomeScreen的实例不是您的GUI中的那个实例。您需要获得对GUI中HomeScreen实例的引用。如果您发布的kv文件是正确的,则没有HomeScreen的实例。但是,我怀疑您没有提供完整的kv文件。

如果您的addNewGoal()方法是您的App的方法(也无法从您发布的代码中清除),则addNewGoal()中的这一行应类似于:

self.root.get_screen('homescreen').add_widget(progressbar)

假定GUI的根是ScreenManager,而name的{​​{1}}是HomeScreen