Использование Fbo для рендеринга корневого виджета в Kivy - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть Popup, для которого я хочу сделать его фон прозрачным.Я получаю картинку для размытия путем рендеринга app.root в Fbo, однако, когда я восстанавливаю виджет app.root из Fbo, виджет отображается не в каждом кадре, а только когда Animation на любомВиджет работает или окно перетаскивается.Полный файл находится здесь: https://github.com/XtremeWare/XtremeUpdater/blob/master/src/main.py#L493

фрагмент:

def render_background(*args):
    fbo = Fbo(size=app.root.size, with_stencilbuffer=True)

    with fbo:
        Scale(1, -1, 1)
        Translate(-app.root.x, -app.root.y - app.root.height, 0)

    fbo.add(app.root.canvas)
    fbo.draw()
    tex = fbo.texture
    fbo.remove(app.root.canvas)
    tex.flip_vertical()

    img = Image.frombytes('RGBA', tex.size, tex.pixels)
    img = img.filter(ImageFilter.GaussianBlur(50))

    tex = Texture.create(size=img.size)
    tex.blit_buffer(
        pbuffer=img.tobytes(), size=img.size, colorfmt='rgba')
    tex.flip_vertical()
    self.canvas.before.get_group('blur')[0].texture = tex

Clock.schedule_once(render_background)

1 Ответ

0 голосов
/ 13 декабря 2018

Я понял это.Следующая строка должна быть в конце .

Window.canvas.insert(0, app.root.canvas)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...