如何正确使用kivy图形上下文指令

时间:2016-06-26 21:02:51

标签: python kivy

您好我最近尝试过kivy图形,上下文指令(旋转,ranslate等)。所以我试图实现一个动画旋转轮(例如用于显示加载屏幕)。为此,我使用了garden.iconfonts包,紧跟在包中实现的示例。继承我的代码

.kv

<Convert>:
   pos_hint: {'center_x':.5, 'center_y':.5}
   size_hint: .8,.4
   auto_dismiss: False
   on_open:
      self.load()
   loading:loading
   BoxLayout:
      pos: root.pos
      canvas.before:
         Color:
            rgba: 1,1,1,1
         Rectangle:
            pos: self.pos
            size: self.size
            source: 'icons/olivine.png'
      orientation: 'vertical'
      Label:            #STATUS 20 PERCENT
         text: 'Converting file...'
         id: status
         size_hint: 1,.2
         markup: True
      RelativeLayout:    #picture or rolling 60 %
         size_hint: 1,.6
         Label:      #SPINNER
            text: '{}'.format(icon('icon-spin6', 32))
            size_hint: 1,1
            markup: True
            p: 0
            id: loading
            canvas:
               PushMatrix
               Rotate:
                  angle: -self.p
                  origin: self.center
                  axis: 0,0,1
               PopMatrix

.py

from kivy.uix.modalview import ModalView
from kivy.properties import ObjectProperty
from kivy.animation import Animation


class Convert(ModalView):
   loading= ObjectProperty()
   def load(self):
      anim = Animation(p = 360, duration= 1) + Animation(p=0 , duration=0)
      anim.repeat = True
      anim.start(self.loading)

从我的代码转换是一个弹出窗口,单击一个按钮时显示,然后在打开时显示旋转轮。 但是当我运行代码时它只显示轮子(即iconfont),但不会旋转。 该代码仅在我将标签下的canvas类更改为canvas.before时才有效。我假设我对如何使用这些工具的理解仍然很差。所以我希望有人可以帮助清除我做错了什么,以及如何使用canvas

来完成这项工作

1 个答案:

答案 0 :(得分:1)

canvas:
    PushMatrix
    Rotate:
       angle: -self.p
       origin: self.center
       axis: 0,0,1
    PopMatrix

RotatePopMatrix之间的所有内容都会被旋转 - 这是PushMatrix和PopMatrix的重点,它们会绑定应用任何矩阵变换的区域。

在这种情况下,你没有把任何东西放在它们之间,所以你看不到任何旋转。

您可能希望将PushMatrixRotate放在canvas.before中,将PopMatrix放在canvas.after中。由于标签绘图发生在画布中,因此它将处于旋转状态。