Киви: Как изменить размер виджета с помощью функции on_touch_move? - PullRequest
0 голосов
/ 05 августа 2020

Как новичок python ученик, я пытаюсь создать это простое приложение, используя kivy, чтобы изменять толщину прямоугольника с помощью различных входов. Во-первых, я попытался сделать это с помощью кнопок, и с некоторой помощью этого сообщества мне удалось заставить его работать.

Теперь, когда эта проблема решена, я подумал о том, чтобы перейти на следующий уровень, используя on_touch_move для перемещения по экрану для изменения толщины. Но снова наткнулись на новую проблему.

Когда я запускаю этот код, ошибки нет, также обновляются boundary_thickness_x и boundary_thickness_y (проверено с помощью печати). Но размер (толщина) виджетов не обновляется в окне.

Интересно, какую ошибку я могу сделать?

**main.py**

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty, ObjectProperty

class Boundary(Widget):

    boundary_thickness_x = NumericProperty(10)
    boundary_thickness_y = NumericProperty(10)

    def on_touch_move(self, touch):
        x = touch.x/self.width * 100
        y = touch.y/self.height * 100

        boundary_thickness_x = x
        boundary_thickness_y = y
        
        #print(boundary_thickness_x, boundary_thickness_y)
    
class BounceApp(App):
    def build(self):
        return Boundary()

BounceApp().run()
**bounce.kv**

<Boundary>
    canvas: 
        Rectangle:
            pos : 0, 0
            size: self.boundary_thickness_x, root.height

        Rectangle:
            pos : 0, 0
            size: root.width, self.boundary_thickness_y

        Rectangle:
            pos : root.width - self.boundary_thickness_x, 0
            size: self.boundary_thickness_x, root.height

        Rectangle:
            pos : 0, root.height - self.boundary_thickness_y
            size: root.width, self.boundary_thickness_y

1 Ответ

0 голосов
/ 05 августа 2020

Ваш метод on_touch_move() не настраивает правильные свойства. Это всего лишь настройка пары локальных переменных. Просто измените этот метод на:

def on_touch_move(self, touch):
    x = touch.x / self.width * 100
    y = touch.y / self.height * 100

    self.boundary_thickness_x = x
    self.boundary_thickness_y = y

Вы должны использовать self. для ссылки на свойства.

...