防止在动画过程中重绘TabbedPanel

时间:2019-06-07 13:01:28

标签: python kivy

非常感谢您的协助。

下面是显示问题的示例代码, 当按下('Press me')按钮并调整窗口小部件的大小(视图中出现白框)时,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 :(得分:0)

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