在 KivyMD Python 中更改开始屏幕时,如何在启动时显示或关闭消息?

Posted

技术标签:

【中文标题】在 KivyMD Python 中更改开始屏幕时,如何在启动时显示或关闭消息?【英文标题】:How to show or dismissed a message at startup when the start screen is changed in KivyMD Python? 【发布时间】:2021-10-30 03:53:14 【问题描述】:

我是 Python 初学者。如果我的 KivyMD 应用程序中的起始屏幕是 screen1,我想关闭一条消息。如果起始屏幕是 screen2 或任何其他屏幕,则应始终显示该消息。我该怎么做?

这是我的代码。


from kivy.lang.builder import Builder
from kivy.uix.screenmanager import Screen
from kivymd.app import MDApp
from kivymd.uix.button import MDFlatButton, MDRaisedButton
from kivymd.uix.dialog import MDDialog

screen_helper = """

ScreenManager:
    Screen1:
    Screen2:
    
<Screen1>:
    name : 'screen1'
    
<Screen2>:
    name : 'screen2'
    
"""


class Screen1(Screen):
    pass


class Screen2(Screen):
    pass


class Mode(MDApp):
    def build(self):
        return Builder.load_string(screen_helper)

    def on_start(self):
        self.add_songs_dialog = MDDialog(
            title="Add Songs",
            text="Your Albums are Empty.Mode has been either restored or Albums have been Deleted."
                    "\n\nYou should add Songs to Launch Mode.",
            buttons=[
                MDFlatButton(
                    text='Later', font_style='Button'
                ),
                MDRaisedButton(
                    text='Add Songs', font_style='Button', md_bg_color=self.theme_cls.accent_dark
                ),
            ],
        )
        self.add_songs_dialog.open()

Mode().run()

我尝试了多种方法,但找不到合适的解决方案。请帮帮我。

【问题讨论】:

请做一个更小的例子,你有很多对这个问题无关紧要的东西,比如'E:\K75 Programming\Python\Mode\ModeInfo/',这会使应用程序崩溃。也不需要储存东西。 JsonStore @Utopion ,感谢您的回复。其实这不是原来的程序。我写得很短。在程序中,我只想在'E:\K75 Programming\Python\Mode\ModeInfo/' 目录为空时显示消息。此外,如果没有名为std_profile.json 的文件,则应将屏幕导航到screen1。如果起始屏幕是 screen1,我想关闭该消息。否则应显示该消息。请帮助我成功地做到这一点。 好的,但是您的问题是关于 How to show/hide message when screen appears ? 这与现有文件的条件无关并注册 json 这意味着你可以更简化你的代码。这意味着我必须自己做。这意味着我可以帮助其他需要时间做他们能做的事情并询问他们不知道的事情的人。 (没有压力,我以前也和你一样,我只是给你一些理由和建议,告诉你如何以及为什么应该做更好的问题) @Utopion,谢谢先生教我改进我的提问方式。我已经编辑了我的问题。现在,我想我把它做得尽可能简单。那是对的吗?还是应该进一步纠正? 如果我复制/粘贴它,您的代码不起作用。 【参考方案1】:
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import Screen
from kivymd.app import MDApp
from kivy.uix.popup import Popup

screen_helper = """
ScreenManager:
    Screen1:
    Screen2:

<Screen1>:
    name : 'screen1'
    MDFlatButton:
        id: button
        text: "Go to Page 2"

<Screen2>:
    name : 'screen2'
    MDFlatButton:
        id: button
        text: "Go to Page 1"

<CustomPopup>:
    size_hint: None, None
    size: dp(350), dp(300)
    pos_hint: 'center_x': .5, 'center_y': .5
    MDLabel:
        text: 'I am displayed on every screen except "screen1"'
"""


class Screen1(Screen):
    pass

class Screen2(Screen):
    pass

class CustomPopup(Popup):
    pass

class MyApp(MDApp):
    def build(self):
        return Builder.load_string(screen_helper)

    def change_screen(self, name):
        self.root.current = name
        if not name == "screen1":
            CustomPopup().open()

    def on_start(self):
        self.root.get_screen("screen1").ids["button"].bind(on_press=lambda w: self.change_screen("screen2"))
        self.root.get_screen("screen2").ids["button"].bind(on_press=lambda w: self.change_screen("screen1"))

MyApp().run()

【讨论】:

@Utopion 先生,现在它运行正常。非常感谢。

以上是关于在 KivyMD Python 中更改开始屏幕时,如何在启动时显示或关闭消息?的主要内容,如果未能解决你的问题,请参考以下文章

Python透明KivyMD导航抽屉

在kivymd中更改屏幕之间的过渡

从 kivymd 工具栏更改屏幕

使用按钮更改 kivy 或 kivymd 中的屏幕

如何在 KivyMD (Python) 中结合导航抽屉和多个屏幕?

AttributeError:“屏幕”对象在 Python KivyMD 中没有属性“文本”