Pregunta

Quiero dibujar algunos triángulos en un lienzo, lo que cambiará el tamaño mientras cambie el tamaño de la ventana.El uso del código es el siguiente

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import  Label
from kivy.lang import Builder
from kivy.uix.textinput import TextInput
from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout

    Builder.load_string("""

    <ScreenUI>:
        radius: 0.9 * min(self.center_x, self.center_y)
        tside: 2 * (min(self.center_x, self.center_y) - self.radius / 1.4)
        r_width: self.center_x + self.radius
        r_x: self.center_x - self.radius

        canvas:
            Triangle:
                points: root.r_x, 0, root.tside, 0, 0, root.tside
            Triangle:
                points: root.r_width, 0, root.r_x - root.tside, 0, root.r_width, root.tside
    """)

    class ScreenUI(BoxLayout):
        pass

    class WidgetApp(App): 

        def build(self):
            app = ScreenUI()
            return app

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

Los errores que obtengo son:

kivy.lang.BuilderException: Parser: File "<inline>", line 13:
...
  11:            points: root.r_x, 0, root.tside, 0, 0, root.tside
  12:        Triangle:
>>13:            points: root.r_width, 0, root.r_x - root.tside, 0, root.r_width,   root.tside
...
BuilderException: Parser: File "<inline>", line 13:
...
  11:            points: root.r_x, 0, root.tside, 0, 0, root.tside
  12:        Triangle:
>>13:            points: root.r_width, 0, root.r_x - root.tside, 0, root.r_width, root.tside
 ...
 TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType'

¿Cómo puedo usar el idioma KV para calcular las esquinas de los triángulos?

¿Fue útil?

Solución

Debe agregar las propiedades a la clase de Python de ScreenUI:

class ScreenUI(BoxLayout):
    radius = NumericProperty(0)
    tside = NumericProperty(0)
    r_width = NumericProperty(0)
    r_x = NumericProperty(0)

No olvides importar el código NumericProperty:

from kivy.properties import NumericProperty

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top