我无法通过基维获得两次交易之间的时差

问题描述

我想保留ReflexScreen类的on_event和on_leave函数中2个time.time()方法返回的值。我想在MainScreen类中使用这些值,但是当我在MainScreen类中调用这些函数时,将再次调用这些函数,并且它们不会保留当前值。因此它返回了一个新值,并且两者的值相同,因为我同时调用了它们。

from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen
from kivymd.app import MDApp
from time import sleep,time
from random import randint
from kivymd.uix.label import MDLabel


Window.size = (300,500)

helper = """
ScreenManager:

    MenuScreen:

    ReflexScreen:
    
    MainScreen:
    
<MainScreen>:
    id: main
    name: 'main'
    
    BoxLayout:
        orientation: 'vertical'

        MDToolbar:
            title: 'Test Your Reflex'
            elevation:10

        Widget:  
    MDRectangleFlatButton:
        text: 'P L A Y'
        on_press: root.manager.current = 'menu'
        size_hint_x: None
        size_hint_y: None
        width: 20
        height: 30
        pos_hint: {'center_x':0.5,'center_y':0.5}
        md_bg_color: 0.2,0.3,0.6,0.1
        text_color: 0.2,0.5,1
              
    MDLabel:
        id: score_label
        size_hint_x: 0.45
        size_hint_y: None
        pos_hint: {'center_x':0.5,'center_y':0.4}             


<ReflexScreen>:
    id: reflex
    name: 'reflex'

    Button:
        id: reflex_button
        text: 'Wait Change The Color'
        font_size: '20sp'
        pos_hint: {'center_x':0.5,'center_y':0.5}
        on_press: root.manager.current = 'main'
        size_hint_x: None
        size_hint_y: None
        width: 300
        height: 500
        background_color: 1,0.8

<MenuScreen>
    id: menu
    name: 'menu'

   
    
    BoxLayout:
        orientation: 'vertical'

        MDToolbar:
            title: 'Test Your Reflex'
            elevation:10

        Widget:

    MDRectangleFlatButton:
        text: 'P L A Y'
        on_press: root.manager.current = 'reflex'
        size_hint_x: None
        size_hint_y: None
        width: 20
        height: 30
        pos_hint: {'center_x':0.5,1
        
         
                
"""




class ReflexScreen(Screen):

    def on_enter(self,*args):
        """Event fired when the screen is displayed: the entering animation is
        complete."""
        sleep(randint(1,6))

        self.ids.reflex_button.background_color = (0,1,0.8)
        start = time()
        print(start)
        self.ids.reflex_button.text = 'CLICK !!!'
        return start

    def on_leave(self,*args):
        end = time()
        print(end)
        self.ids.reflex_button.background_color = (1,0.8)
        return end


"""rscreen = ReflexScreen()
start = rscreen.on_enter()
end = rscreen.on_leave()"""

class MainScreen(Screen):


    def on_enter(self,*args):
        rscreen = ReflexScreen()
        start = rscreen.on_enter()
        end = rscreen.on_leave()
        #reflexclass = ReflexScreen()
        #final_time = reflexclass.on_leave()-reflexclass.on_enter()
        #print(final_time)
        final_time = (end-start)
        self.ids.score_label.text = f"TIME : {str(final_time)}"

如果我在下面两个类之间添加代码块,并在MainScreen类中使用这些变量,

rscreen = ReflexScreen()
start = rscreen.on_enter()
end = rscreen.on_leave()

我可以得到想要的结果,但是如果我这样做,kivy会告诉我self.ids.reflex_button.background_color = (0,0.8) File "kivy \ properties.pyx",line 863,in kivy.properties.ObservableDict .__ getattr__ AttributeError: 'super' object has no attribute returns '__getattr__'错误。

我认为这是因为这个原因。第一次加载窗口时,未分配在帮助器中定义的名称值,当第二次打开窗口时,将为该类定义该名称值。通过执行打印(自我),我看到名称值第一次返回为空,第二次返回为全。如何解决此问题或获得点击之间的时差?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)