如何在所有屏幕上放置一个带有时间的标签

Posted

技术标签:

【中文标题】如何在所有屏幕上放置一个带有时间的标签【英文标题】:How can I put one label with time on all of my screens 【发布时间】:2017-11-27 18:19:43 【问题描述】:

我从 kivy 开始,有一些问题。我有几个屏幕和按钮的代码。我怎样才能在我的所有屏幕上贴上一个带有时间的标签或类似的东西?在下面的代码中,我创建了一个屏幕,但我不想在各个屏幕上放置 3 个单独的标签

main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.properties import StringProperty, ObjectProperty
from kivy.clock import Clock
from kivy.uix.textinput import TextInput
from kivy.uix.screenmanager import ScreenManager, Screen

Builder.load_string("""
<StartScreen>:
    BoxLayout:
        orientation: 'vertical'
        Button:
            text: 'Start >'
            size_hint_y: None
            hight: '40dp'
            on_press: root.manager.current = 'second'

<SecondScreen>:
    BoxLayout:
        orientation: 'vertical'
        Button:
            text: 'Test2'
            size_hint_y: None
            hight: '40dp'
            on_press: root.manager.current = 'end'

<EndScreen>:
    BoxLayout:
        Button:
            text: 'Test3'
            size_hint_y: None
            hight: '40dp'
            on_press: root.manager.current = 'start'
""")

#declarate both screens
class StartScreen(Screen):
        pass

class SecondScreen(Screen):
        pass

class EndScreen(Screen):
        pass

#create the screen manager
sm = ScreenManager()
sm.add_widget(StartScreen(name='start'))
sm.add_widget(SecondScreen(name='second'))
sm.add_widget(EndScreen(name='end'))

class TutorialApp(App):
    def build(self):
        return sm

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

【问题讨论】:

【参考方案1】:

这是基于https://***.com/a/18926863/6646710的一种可能解决方案

下面的代码定义了一个显示时间的标签。

import time

class IncrediblyCrudeClock(Label):
    def __init__(self, **kwargs):
        super(IncrediblyCrudeClock, self).__init__(**kwargs)
        Clock.schedule_interval(self.update, 1)

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

更新函数从 python time 模块获取当前时间。该时间用于更新标签的text 属性。在init 方法中,clock 模块用于安排每秒调用此更新函数。


接下来,我将此标签添加到 kv 字符串内的所有 kivy 屏幕。

<StartScreen>:
    BoxLayout:
        orientation: 'vertical'
        Button:
            text: 'Start >'
            size_hint_y: None
            hight: '40dp'
            on_press: root.manager.current = 'second'
        IncrediblyCrudeClock:

<SecondScreen>:
    BoxLayout:
        orientation: 'vertical'
        Button:
            text: 'Test2'
            size_hint_y: None
            hight: '40dp'
            on_press: root.manager.current = 'end'
        IncrediblyCrudeClock:

<EndScreen>:
    BoxLayout:
        Button:
            text: 'Test3'
            size_hint_y: None
            hight: '40dp'
            on_press: root.manager.current = 'start'
        IncrediblyCrudeClock:

最终结果是这样的

【讨论】:

以上是关于如何在所有屏幕上放置一个带有时间的标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在屏幕底部放置离子标签?

如何在 Snapchat 上的视频上添加文本

如何在 MVC 中巧妙地设计带有数据的标签?

带有 IntputLabel 和 Input 的 Material UI 网格放置在水平行中:如何要求垂直对齐位于标签的中间?

如何打印(在屏幕上)带有外部 url 的 iframe 所需的所有 JS 代码

如何在锁定屏幕上放置笔记/提醒