2016-12-31 82 views
0

我想解决如何把一个时钟放在一个kivy应用程序,但有困难。kivy&python中的自动事件

我可以使它通过按钮工作..(即如果我点击按钮,它会更新标签上的时钟时间),但我似乎无法让它工作自动更新每秒。

任何帮助非常感谢!

事件行注释掉了,我可以使用一个简单的文件使用打印命令,但不能更改标签文本的上下文。它只是说, “失踪1周人的说法”

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
import time 
from kivy.clock import Clock 


class test(BoxLayout): 
    def showClock(self,dt): 
     timey = (time.strftime("%H"+":"+"%M"+":"+"%S")),dt 
     self.ids.labelID.text = (timey[0]) 
    event = Clock.schedule_interval(showClock, 1) 




class question(App): 
    def build(self):  
     return test() 

if __name__ =="__main__": 
    question().run() 

KV文件:

<test>: 
    id:test 
    BoxLayout: 
     Label: 
      id: labelID 
      text:"label" 
     Button: 
      id: buttonID 
      text:"button" 
      on_release:test.showClock(1) 

编辑:

错误读取:

File "C:\Python34\lib\site-packages\kivy\clock.py", line 406, in tick 
ret = callback(self._dt) 
TypeError: showClock() missing 1 required positional argument: 'dt' 

EDIT2:

后很多试验和期待在其他人的在线代码,我设法得到它的工作..虽然我不知道为什么或如何..任何解释将不胜感激,以帮助我的理解...

工作的代码是:

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
import time 
from kivy.clock import Clock 


class test(BoxLayout): 
    def __init__(self, **kwargs): 
     super(test, self).__init__(**kwargs) 
     Clock.schedule_interval(self.showClock, 1) 

    def showClock(self, dt): 
     timey = (time.strftime("%H"+":"+"%M"+":"+"%S")),dt 
     self.ids.labelID.text = (timey[0]) 



class question(App): 
    def build(self):  
     return test() 

if __name__ =="__main__": 
    question().run() 
+0

始终提出完整的错误消息(Traceback)。 – furas

+0

哪个元素有'缺少1个参数'的问题' - 检查文档中它有多少个参数。 – furas

+0

错误如下:文件“C:\ Python34 \ lib \ site-packages \ kivy \ clock.py”,第406行,格式为 ret = callback(self._dt) TypeError:showClock()缺少1所需的位置参数:'dt' >>> – d4py

回答

0

你的函数showClock需要参数dt。您可以使用“partial”来传递该参数。这是在文档中解释:https://kivy.org/docs/api-kivy.clock.html 希望这有助于。

+0

我一直在尝试部分,但似乎无法解决..我想要通过那个论点?我不需要dt来确定何时会更新?我无法理解的问题是使用“自我”。如果没有自我,我可以将时钟打印到命令行没有任何问题。但没有自我,我不能更新标签文本...不知道如何解决该问题 – d4py

+0

因为该函数将始终引用“自我”,所以如果将其忽略掉,则只需调用传递给它的相同实例“dt “而不是”自我“。这是有效的语法,但常见的用法是调用这个参数自我...什么是不工作使用部分? – Schorsch

+0

它说:self.ids.labelID.text =(timey [0]) AttributeError:'str'对象没有属性'ids' 它现在通过自动打印到控制台..所以越来越近! 我构建它是这样的: def showClock(self,dt,* largs): timey =(time。strftime(“%H”+“:”+“%M”+“:”+“%S”)),dt print(timey [0]) self.ids.labelID.text =(timey [0] ) event = Clock.schedule_interval(partial(showClock,“my self”,“my key”),1) – d4py