如何在 Kivy 应用程序启动时满足特定条件时自动弹出警报

Posted

技术标签:

【中文标题】如何在 Kivy 应用程序启动时满足特定条件时自动弹出警报【英文标题】:How to auto-popup the alert when certain condition is met at the start of the Kivy application 【发布时间】:2021-08-15 00:27:44 【问题描述】:

我正在寻找一些应在应用程序启动时运行的条件 alert() 代码,例如如果密码过期,则当用户单击关闭按钮时,它应该自动弹出警报并关闭应用程序。我已经用 python 和 kivy 编写了代码。 我曾尝试使用 on_start() 函数,但不知何故无法放置正确的逻辑/代码。

.py 文件:

def closeapp(self, arg):
    App.get_running_app().stop()
    Window.close()
          
def on_start(self):
        exp_date = "24/05/2021"
        past = datetime.strptime(exp_date, "%d/%m/%Y")
        present = datetime.now()
        if past.date() <= present.date():  
             print (" Password expired. ")
             self.popup.open()   
        else:
            pass
    
class MyLayout(TabbedPanel):
    ## Main code of the app is written in this section

class MyApp(App):
    def build(self):
            on_start(self)
            return MyLayout()

.kv 文件

<MyLayout>
    do_default_tab: False

    size_hint: 1, 1
    padding: 10
    tab_pos: 'top_left'
    
    TabbedPanelItem:
        id: tab1
##Afer this Main design code starts except the Popup code

我不确定我应该使用单独的 .kv 文件进行弹出设计还是继续使用相同的 .kv 文件,在这两种情况下如何在应用程序启动时自动运行代码。

【问题讨论】:

【参考方案1】:

on_start 函数必须在应用程序的主类中定义,然后它才能正常工作。如果你打算做一个大型应用程序,最好使用单独的文件.kv,这样语法也会高亮显示。

from kivy.app import App
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.uix.popup import Popup
from kivy.lang import Builder
from datetime import datetime

Builder.load_string("""
<MyLayout>
    do_default_tab: False

    size_hint: 1, 1
    padding: 10
    tab_pos: 'top_left'
    
    TabbedPanelItem:
        id: tab1
        
<MyPopup>:
    title: 'Alert'
    auto_dismiss: False
    size_hint: None, None
    size: 400, 400
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Text'
            
        Button:
            text: 'Close me!'
            on_release: 
                root.dismiss()
                app.close_app()
""")


class MyPopup(Popup):
    pass


class MyLayout(TabbedPanel):
    pass


class MyApp(App):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.popup = MyPopup()

    def build(self):
        return MyLayout()

    @staticmethod
    def close_app(*args):
        App.get_running_app().stop()

    def on_start(self):
        exp_date = "24/05/2021"
        past = datetime.strptime(exp_date, "%d/%m/%Y")
        present = datetime.now()
        if past.date() <= present.date():
            print(" Password expired. ")
            self.popup.open()


MyApp().run()

【讨论】:

非常感谢您的回复。我已经在 .py 文件和 .kv 文件中的 GUI 中完成了整个编码,因此需要您的帮助才能在现有文件中添加条件弹出窗口。在这个阶段不可能改变现有的结构。谢谢。 我提供了一个可以满足您的问题的工作示例,如果您需要将kv 代码放在单独的文件中,只需将其复制到那里 感谢您再次回复。我已经在 .py 文件和 .kv 文件中进行了更改。但出现错误,即 PopupException: Popup 只能有一个小部件作为内容。 我认为它与 .kv 文件中的现有代码冲突。 ' do_default_tab: False size_hint: 1, 1 padding: 10 tab_pos: 'top_left' TabbedPanelItem: id: tab1 text: "Nft" : title: 'Alert' auto_dismiss: False size_hint:无,无尺寸:400、400 BoxLayout:方向:“垂直”标签:文本:“文本”按钮:文本:“关闭我!” on_release: root.dismiss() app.close_app() BoxLayout: id:t1bl1 方向: 'vertical' 标签: id:t1h 很可能,请仔细阅读Popup 并查看我上面的示例,如果您无法解决问题,请在此处附上包含代码和 cmets 的文件

以上是关于如何在 Kivy 应用程序启动时满足特定条件时自动弹出警报的主要内容,如果未能解决你的问题,请参考以下文章

仅当满足特定条件时,JQuery 才会自动完成

Kivy - 如果满足条件,如何更改每个文本输入的颜色

满足特定条件时如何将行写入文本文件

仅在满足条件时如何启动调试器

如何使用来自另一个 kivy 应用程序的参数启动 kivy 应用程序

如何仅在满足条件时启动调试器