如何在 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 文件中的现有代码冲突。
'以上是关于如何在 Kivy 应用程序启动时满足特定条件时自动弹出警报的主要内容,如果未能解决你的问题,请参考以下文章