Предотвратить перерисовку TabbedPanel во время анимации - PullRequest
1 голос
/ 07 июня 2019

Любая помощь очень ценится.

Вот пример кода, показывающий проблему: когда кнопка («Нажми меня») нажата, а виджет изменен (виден белый прямоугольник), перерисовывается панель TabbedPanel.как глюк (хотя его нет).

Я попытался изменить порядок компоновки и немного поиграл с анимацией, нет

Я хотел бы предотвратить такое мигание панели вкладок слева.

import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.animation import Animation
from kivy.lang import Builder

Builder.load_string('''
<Main>:
    BoxLayout:
        orientation:'vertical'
        BoxLayout:
            id: main_screen
            orientation: 'horizontal'
            TabbedPanel:
                do_default_tab: False
                tab_pos: 'left_top'
                tab_width: main_screen.height/4
                TabbedPanelItem:
                    text: 'four'
                TabbedPanelItem:
                    text: 'three'
                TabbedPanelItem:
                    text: 'two'
                TabbedPanelItem:
                    text: 'one'
            BoxLayout:
                id: swidget
                slide: 0  
                size_hint: None, None
                height: main_screen.height
                width: self.slide
                canvas:
                    Color:
                        rgba: 1,1,1,1
                    Rectangle:
                        pos: self.pos
                        size: self.size 
        Button:
            size_hint_y: None
            height: '33dp'
            text: 'Press me'
            on_release: root.display_widget(swidget)
''')

class Main(BoxLayout):
    def __init__(self, **kwargs):
        super(Main, self).__init__(**kwargs)

    def display_widget(self, widget):
        swidget = widget

        if swidget.slide == 0:
            anim = Animation(slide=105, duration=0.6)
            anim.start(widget)
        else:
            anim = Animation(slide=0, duration=0.6)
            anim.start(widget)


class TabbedApp(App):
    def build(self):
        return Main()


TabbedApp().run()

1 Ответ

0 голосов
/ 07 июня 2019

Добавьте AnchorLayout в качестве родителя для swidget / BoxLayout, и когда анимация начнется, она не повлияет на экземпляр TabbedPanel.

Отрывки

        AnchorLayout:
            anchor_x: 'right'
            anchor_y: 'top'
            size_hint_x: None
            width: 0

            BoxLayout:
                id: swidget
                slide: 0  
                size_hint_x: None
                width: self.slide
                canvas:
                    Color:
                        rgba: 1,1,1,1
                    Rectangle:
                        pos: self.pos
                        size: self.size 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...