【发布时间】:2022-01-21 12:53:31
【问题描述】:
我想制作一个带有 kivy 的应用程序,它具有屏幕管理和导航抽屉。当我按下按钮时,它向我显示此错误:“AttributeError:'Screen'对象没有属性'mas'” mas 是命令的名称。这是代码
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.widget import Widget
from plyer import notification
from kivymd.app import MDApp
from datetime import *
KV = '''
<ContentNavigationDrawer>:
ScrollView:
MDList:
OneLineListItem:
text: "Accueil"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "acc"
OneLineListItem:
text: "Comment ça marche ?"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 1"
OneLineListItem:
text: "Les infections nosocomiales"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 2"
OneLineListItem:
text: "Aidez-nous à améliorer l'application"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "aaa"
Screen:
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: "STOP-IN"
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
MDNavigationLayout:
x: toolbar.height
ScreenManager:
id: screen_manager
Screen:
name: 'acc'
BoxLayout:
orientation: 'vertical'
padding:50
spacing:10
MDLabel:
text: ' Lavage/Désinfections des mains'
MDSwitch:
active: True
on_active: root.lav(self, self.active)
MDLabel:
text: ' Changement de masque'
MDSwitch:
active: True
on_active: root.mas(self, self.active)
MDLabel:
text: ' Changement de blouse'
MDSwitch:
active: True
on_active: root.blo(self, self.active)
Screen:
name: "scr 1"
Image:
source: 'ccm.jpg'
Screen:
name: "scr 2"
Image:
source: 'lis.jpg'
Screen:
name: "aaa"
GridLayout:
padding:50
cols:1
size: root.width, root.height
MDTextField:
id: txt
multiline: True
hint_text: "Comment pourrions améliorer l'application ?"
MDFlatButton:
text: 'Envoyer'
on_press: root.cl(self)
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
'''
class ContentNavigationDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
def cl(self, *args):
txt.text = ""
def lav(self, switchObject, switchValue):
if switchValue == True:
time = datetime.strptime("03/02/21 16:30", "%d/%m/%y %H:%M")
f = time.minute + 20
while True:
time = datetime.strptime("03/02/21 16:30", "%d/%m/%y %H:%M")
if time.minute == future:
notification.notify(title="Lavez-vous les mains!",icon="kivy_logo", message="Lavez-vous les mains!", timeout=1200)
def mas(self, switchObject, switchValue):
if switchValue == True:
time = datetime.strptime("03/02/21 16:30", "%d/%m/%y %H:%M")
f = time.hour + 2
futuremin = time.minute
while True:
time = datetime.strptime("03/02/21 16:30", "%d/%m/%y %H:%M")
if time.hour == future and time.minute == futuremin:
notification.notify(title="Changez de masque!",icon="kivy_logo", message="Il est temps de changer de masque!", timeout=12000)
def blo(self, switchObject, switchValue):
if switchValue == True:
time = datetime.strptime("03/02/21 16:30", "%d/%m/%y %H:%M")
f = time.hour + 2
futuremin = time.minute
while True:
time = datetime.strptime("03/02/21 16:30", "%d/%m/%y %H:%M")
if time.hour == future and time.minute == futuremin:
notification.notify(title="Changez de blouse!",icon="kivy_logo", message="Il est temps de changer de blouse!", timeout=12000)
if time.hour == 12 and time.minute == 30:
notification.notify(title="Enlevez votre blouse!",icon="kivy_logo", message="Enlevez votre blouse avant d'aller à la buvette!", timeout=12000)
class TestNavigationDrawer(MDApp):
def build(self):
self.icon = 'log'
return Builder.load_string(KV)
TestNavigationDrawer().run()
当我单击开关或按钮时,它会显示错误并关闭窗口
【问题讨论】: