Как нарисовать прямоугольник над кнопкой с фиксированной шириной в Kivy? - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу закрыть кнопку красным прямоугольником в Киви. Эта кнопка стоит в BoxLayout. Я определил класс MyButton, который показывает aws прямоугольник над кнопкой, и это работает. Однако, если я исправлю ширину BoxLayout, в которой находится кнопка, прямоугольник перейдет в нижний левый угол.

MWE:

# -*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.graphics import Color, Rectangle

Builder.load_string('''
<MainApp>:
    orientation: 'horizontal'
    BoxLayout:
        orientation: 'vertical'
        # width: 100  # uncommenting these two lines breaks the rectangle positioning
        # size_hint: (None,1)
        MyButton:
            text: 'button1'
            size_hint: (1,None)
            height: 50
        Label:
    Label:
''')


class MyButton(Button):
    def __init__(self, **kwargs):
        super(MyButton, self).__init__(**kwargs)

    def on_size(self, *args):
        self.canvas.after.clear()
        with self.canvas.after:
            Color(1, 0, 0, 1)
            Rectangle(pos=self.pos, size=self.size)


class MainApp(BoxLayout):
    pass


class TestApp(App):
    def build(self):
        return MainApp()


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

Раскомментирование двух закомментированных строк в Builder.load_string ломает позиционирование прямоугольника. Чего мне не хватает?

1 Ответ

0 голосов
/ 28 апреля 2020

В вашем классе MyButton у вас есть метод on_size(), но нет метода on_pos(). Я думаю, вам просто нужно добавить этот метод:

def on_pos(self, *args):
    self.on_size()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...