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

Я только начал изучать python и почти уверен в OOP. Так что просто попытайтесь попрактиковаться в создании очень простого приложения с использованием kivy. Идея состоит в том, чтобы мяч отскакивал внутри экрана. При этом толщину границ можно увеличить, нажав кнопку, чтобы у мяча было меньше области для отскока.

Но возникла проблема на самом первом этапе программирования поведения границы. Я создал границы в файле .kv и использовал переменную boundary_thickness, чтобы присвоить ему начальное значение 10. И используя метод boundaryIncrease для обновления этого значения при каждом нажатии кнопки.

После запуска кода я не получаю никаких ошибок, но нажатие кнопки также не меняет толщину границы. Но я заметил, что после нажатия кнопки, если я изменяю размер окна, boundary_thickness действительно обновляется до нового значения, а толщина границы увеличивается.

Есть ли способ обновить это значение в реальном -time, без необходимости каждый раз изменять размер окна?

Или способ исправить любую ошибку, которую я сделал?

PS Совершенно новый для мира программирования.

Заранее спасибо :)

**main.py**

from kivy.app import App
from kivy.uix.widget import Widget

class BounceGame(Widget):
    boundary_thickness = 10
    
    def boundaryIncrease(self):
        self.boundary_thickness += 5

class BounceApp(App):
    def build(self):
        return BounceGame()

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

<BounceGame>
    canvas: 
        Rectangle:
            pos : 0, 0
            size: self.boundary_thickness, root.height

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

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

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

    Button:
        center: root.center_x, root.center_y
        text: "Button"
        on_press: root.boundaryIncrease()

1 Ответ

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

Вам нужно использовать NumericProperty , чтобы let kivy обновляла это значение на экране. Итак, давайте импортируем это свойство:

from kivy.properties import NumericProperty

Теперь измените значение border_thickness на что:

boundary_thickness = NumericProperty(10)

Вот и все.

...