2015-03-12 3 views
0

Я пытаюсь создать строку и обновление после определенного интервала времени (например, 5 секунд). Я написал код ниже, но он не обновляет строку. Может ли кто-нибудь помочь мне выяснить, кто это сделает?Обновите сегмент строки в python kivy через определенное время

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.widget import Widget 
from kivy.lang import Builder 
from kivy.graphics import Color, Ellipse, Line 
import time 
from kivy.clock import Clock 

class MyWidget(Widget): 
    def my_callback(dt,ds): 
     Line(points=[100, 100, 200, 100, 100, 200], width=10) 
     pass 

    def __init__(self, **kwargs): 
     super(MyWidget, self).__init__(**kwargs) 
     with self.canvas: 
      self.line = Line(points=[100, 100, 200, 100, 100, 200], width=1) 
      self.line.width = 2 
      Clock.schedule_once(self.my_callback, 5) 
      pass 
      # add your instruction for main canvas here 

     with self.canvas.before: 
      pass 
      # you can use this to add instructions rendered before 

     with self.canvas.after: 
      pass 
      # you can use this to add instructions rendered after 

class LineExtendedApp(App): 
    def build(self): 
     root = GridLayout(cols=2, padding=50, spacing=50) 
     root.add_widget(MyWidget()) 
     return root 

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

ответ

0

my_callback не на самом деле называется в with заявлении, а 5s позже, когда это уже давно нет, и даже если это было бы не делать то, что вы хотите, - это было бы нарисовать новую линию, не изменяет существующий.

Вместо этого, вы можете изменить my_callback сделать:

self.line.points = [100, 100, 200, 100, 100, 200] 
self.line.width = 10 

Это изменит существующую линию, как вы хотите. Вы также можете выполнить расписание часов из оператора «с», но его положение фактически не имеет значения, если оно остается в __init__

Смежные вопросы