2016-10-31 6 views
1

Ich versuche, eine Multi-Screen-App zu machen und ich möchte ein Datum/Zeit-Label auf allen von ihnen. Ich habe ein Clock-Event gemacht, das den Textwert jede Sekunde aktualisiert.update kivy Etikett mit Screen Manager

Das Clock-Ereignis funktioniert, weil auf der Python-Konsole kann ich es aktualisieren sehen, aber das Etikett ist nicht erfrischend, es funktioniert nur das erste Mal. Wie kann ich den Bildschirm aktualisieren?

Die main.py Datei:

import kivy 
import time 
from kivy.app import App 
from kivy.uix.label import Label 
from kivy.config import Config 
from kivy.core.window import Window 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.lang import Builder 
from kivy.clock import Clock 

kivy.require("1.9.1") 
Window.size = (1280,1024) 
Config.set('graphics', 'fullscreen', '0') 

class TimeLabel(Label): 
    def __init__(self, **kwargs): 
     super(TimeLabel, self).__init__(**kwargs) 
     self.text= str(time.asctime()) 

    def update(self, *args): 
     self.text = str(time.asctime()) 
     print self.text 


class LoginScreen(Screen): 
    pass 


class MainScreen(Screen): 
    pass 


class ScreenManagement(ScreenManager): 
    pass 


class My1App(App): 
    def build(self): 
     my1sm = Builder.load_file("main.kv") 
     crudeclock = TimeLabel() 
     Clock.schedule_interval(crudeclock.update, 1) 
     return my1sm 


if __name__ == '__main__': 
    My1App().run() 

und die main.kv Datei:

#: kivy 1.9 
#: import ScreenManager kivy.uix.screenmanager.ScreenManager 
#: import Screen kivy.uix.screenmanager.ScreenManager 
#: import FadeTransition kivy.uix.screenmanager.FadeTransition 

ScreenManagement: 
    transition: FadeTransition() 
    MainScreen: 
    LoginScreen: 


<MainScreen>: 
    name: 'main' 
    size_hint: (1, 1) 
    FloatLayout: 
     Image: 
      source: './background.png' 
      size: 1280,1024 
    TimeLabel: 


<LoginScreen>: 
    name: 'loginS' 
    FloatLayout: 
     Image: 
      source: './Login.png' 
      size: 1280,1024 
    TimeLabel: 


<TimeLabel>: 
    x:-545 
    y:-475 
    color: (0,0,0,1) 

Antwort

1

Sie müssen die schedule_interval setzen, wenn das Etikett instanziiert wird.

import kivy 
import time 
from kivy.app import App 
from kivy.uix.label import Label 
from kivy.config import Config 
from kivy.core.window import Window 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.lang import Builder 
from kivy.clock import Clock 

kivy.require("1.9.1") 
Window.size = (600,600) 
Config.set('graphics', 'fullscreen', '0') 

class TimeLabel(Label): 
    def __init__(self, **kwargs): 
     super(TimeLabel, self).__init__(**kwargs) 
     self.text= str(time.asctime()) 
     Clock.schedule_interval(self.update,1) 

    def update(self, *args): 
     self.text = str(time.asctime()) 
     print self.text 


class LoginScreen(Screen): 
    pass 


class MainScreen(Screen): 
    pass 


class ScreenManagement(ScreenManager): 
    pass 


class My1App(App): 
    def build(self): 
     my1sm = Builder.load_file("main.kv") 
     crudeclock = TimeLabel() 
     return my1sm 


if __name__ == '__main__': 
    My1App().run() 
+0

Es funktionierte. Vielen Dank!! – ait