Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用Clock.Interval更新Kivy中的可重用标签小部件_Python 3.x_Kivy_Kivy Language - Fatal编程技术网

Python 3.x 使用Clock.Interval更新Kivy中的可重用标签小部件

Python 3.x 使用Clock.Interval更新Kivy中的可重用标签小部件,python-3.x,kivy,kivy-language,Python 3.x,Kivy,Kivy Language,我正在开发一个多页面的Kivy应用程序,我希望在几个页面中有一个时钟小部件。我能够将它作为一个单独的实例在每个页面上实现,但我想将它更改为一个可重用的小部件,但在间隔期间它不会更新 这是.kv文件实现 ScreenManager: id: screen_manager HomeScreen: id: home_screen name: 'home_screen' manager: 'screen_manager' <ClockWidget>: Lab

我正在开发一个多页面的Kivy应用程序,我希望在几个页面中有一个时钟小部件。我能够将它作为一个单独的实例在每个页面上实现,但我想将它更改为一个可重用的小部件,但在间隔期间它不会更新

这是.kv文件实现

ScreenManager:
id: screen_manager
HomeScreen:
    id: home_screen
    name: 'home_screen'
    manager: 'screen_manager'

<ClockWidget>:
    Label:
        text_size: self.size
        halign: 'left'
        valign: 'middle'
        id: clocktime
        text: root.ClockTimeDisplay

<HomeScreen>:
    orientation: 'vertical'
    ScrollView:
        do_scroll_x: True
        scroll_distance: 20
        BoxLayout:
            orientation: 'vertical'
            ClockWidget:
我还尝试在ClockWidget内的on_load函数中触发间隔,但也没有成功


任何帮助都将不胜感激。

问题是,在构建方法中创建的ClockWidget与在.kv中作为BoxLayout的子级创建的ClockWidget不同,在您的情况下,只有时钟只调用第一个方法的update\u Clock方法

另一方面,我认为没有必要在ClockWidget中创建一个新的StringProperty,因为它是一个标签,并且具有属性“text”,另一件奇怪的事情是标签作为子标签具有另一个标签

考虑到上述情况,解决方案是:

从日期时间导入日期时间
从kivy.app导入应用程序
从kivy.clock导入时钟
从kivy.lang导入生成器
从kivy.uix.screenmanager导入屏幕
从kivy.uix.label导入标签
类ClockWidget(标签):
定义初始(自我,**kwargs):
超级()
时钟。计划间隔(自更新时钟,0.1)
def更新时钟(自身,*参数):
self.text=datetime.now().strftime(“%H:%M:%S”)
类主屏幕(屏幕):
通过
职业赛船比赛(App):
def生成(自):
返回生成器加载文件(“regatta\u racer.kv”)
如果名称=“\uuuuu main\uuuuuuuu”:
赛舟会赛车手()跑步
屏幕管理器:
id:屏幕管理器
主屏幕:
id:主屏幕
名称:“主屏幕”
经理:“屏幕经理”
:
文本大小:self.size
哈利格:“左”
valign:“中间”
:
方向:“垂直”
滚动视图:
是否滚动\u x:True
滚动距离:20
盒子布局:
方向:“垂直”
时钟部件:

谢谢,伙计,这很好用。我的第一款Kivy应用程序仍然有一些差距,
class ClockWidget(Label):
    ClockTimeDisplay = StringProperty()
    ClockTimeDisplay = "dummy text"
    text = ClockTimeDisplay

    def __init__(self, **kwargs):
        super(ClockWidget, self).__init__(**kwargs)

    def update_clock(self, *args):
        print(self.text)
        #I've tried all 3 of these implimentations at one time or another.
        self.ClockTimeDisplay = str(datetime.now().strftime('%H:%M:%S'))
        self.text = str(datetime.now().strftime('%H:%M:%S'))
        self.ids.clocktime.text = str(datetime.now().strftime('%H:%M:%S'))

        return ClockTimeDisplay


class HomeScreen(Screen):
    pass


class regatta_racer(App):
    def build(self):
        clock_widget = ClockWidget()
        Clock.schedule_interval(clock_widget.update_clock, .1)
        return Builder.load_file('regatta_racer.kv')


if __name__ == "__main__":
    regatta_racer().run()
ScreenManager:
    id: screen_manager
    HomeScreen:
        id: home_screen
        name: 'home_screen'
        manager: 'screen_manager'

<ClockWidget>:
    text_size: self.size
    halign: 'left'
    valign: 'middle'

<HomeScreen>:
    orientation: 'vertical'
    ScrollView:
        do_scroll_x: True
        scroll_distance: 20
        BoxLayout:
            orientation: 'vertical'
            ClockWidget: