Как ссылаться на холст-вращение, используя ID - PullRequest
0 голосов
/ 15 июня 2019

на kivy-language я хотел бы менять значение угла холста каждый раз, когда ползунок меняет свое значение на on_touch_move.

Я пытался указать «Операцию вращения» вPushMatrix ID с помощью «группы»

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang.builder import Builder

kv = '''
<Seesaw>:
    orientation: "horizontal"
    Widget:
        id: canvas_widget
        size_hint_x: 0.85
        canvas.before:                 
            PushMatrix
            Rotate:         
                group: 'a'  
                #angle: 0              
                axis: 0, 0, 1
                origin: 300, 300
        canvas:
            Color:
                rgb: (0, 0, 1)
            Rectangle:
                pos: 100,300
                size: 400,20
        canvas.after:
            PopMatrix

    Slider:
        size_hint_x: 0.15
        id: slider1
        min: -60
        max: 60
        orientation: 'vertical'     
        on_touch_move: canvas_widget.a.angle = 45, root.printer()   


'''
Builder.load_string(kv) 


class Seesaw(BoxLayout):

    def printer(self):
        print('Slider value changed to: ', self.ids.slider1.value)


class SimpleApp(App):
    def build(self):
        seesaw = Seesaw()
        return seesaw

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

</p> <p>I can't access the angle of the <code>PushMatrix с использованием on_touch_move из Slider на языке kv.

Кто-нибудь понял, как дать PushMatrix идентификатор и как получить доступ к операции поворота?

Заранее спасибо за ваше время.

1 Ответ

0 голосов
/ 15 июня 2019
  • Добавление нового атрибута, angle к созданному объекту, Widget:
  • Назначить новый атрибут углу, angle: self.angle
  • Заменить canvas_widget.a.angle = 45 на canvas_widget.angle = 45

Отрывки

<Seesaw>:
    orientation: "horizontal"
    Widget:
        id: canvas_widget
        angle: 0    # new attribute
        size_hint_x: 0.85
        canvas.before:                 
            PushMatrix
            Rotate:         
                angle: self.angle    # Assignment             
                axis: 0, 0, 1
                origin: 300, 300
        ...

    Slider:
        ...

        on_touch_move: 
            root.printer()   
            canvas_widget.angle = 45

выход

Result

...