单击弹出窗口后,Kivy ScreenManager过渡未设置动画

时间:2020-10-22 14:31:13

标签: python kivy transition

我是Kivy的新手,我最近开始创建自己的应用程序。但是我有一个问题,我不知道为什么要这么做。

基本上,当我打开我的应用程序并按下按钮进入另一个屏幕时,它成功完成了滑动过渡。但是,当我打开一个弹出窗口并关闭它,然后再次单击相同的按钮时,它不会进行任何转换,并且两个屏幕会相互重叠。为什么会这样呢?

几乎解决了该问题的方法是在python文件中使用self.manager.current =“ second”,但是滑动动画仍然不存在,它只会切入下一个屏幕。还是有可能在python文件中制作滑动动画?

我提供了一个简单的示例代码来演示该问题。我不想放所有我做过的事情,因为这会花费太多代码。

任何帮助或建议都将得到应用!

这是示例代码

import kivy                                                                                              
from kivy.app import App                                                                                 
from kivy.uix.floatlayout import FloatLayout                                                             
from kivy.uix.textinput import TextInput                                                                 
from kivy.uix.label import Label                                                                         
from kivy.uix.button import Button,ButtonBehavior                                                        
from kivy.uix.widget import Widget                                                                       
from kivy.uix.screenmanager import Screen, ScreenManager, SlideTransition, CardTransition, FadeTransition
from kivy.uix.popup import Popup,PopupException                                                          
from kivy.lang import Builder                                                                            
                                                                                                         
class FirstScreen(Screen):                                                                               
    def screen1btn(self):                                                                                
        popup = FloatLayout()                                                                            
        pop = Popup(title="Popup", content=popup, size_hint=(0.6, 0.6))                                  
                                                                                                         
        pop.open()                                                                                       
                                                                                                         
class SecondScreen(Screen):                                                                              
    pass                                                                                                 
                                                                                                         
class WindowManager(ScreenManager):                                                                      
    pass                                                                                                 
                                                                                                         
class ExampleApp(App):                                                                                   
    def build(self):                                                                                     
        return WindowManager()                                                                           
                                                                                                         
if __name__ == "__main__":
    ExampleApp().run()                                              

.kv文件

#:import SlideTransition kivy.uix.screenmanager.SlideTransition

<WindowManager>:
    FirstScreen:
    SecondScreen:

<FirstScreen>:
    name: "first"
    FloatLayout:
        Label:
            text: "Screen 1"
            font_size: 20
            pos_hint: {"x": 0.35,"y": 0.3}
        Button:
            text: "Popup"
            size_hint: 0.3,0.1
            pos_hint: {"x": 0.35,"y": 0.4}
            on_release:
                app.root.transition = SlideTransition(direction = "left")
                app.root.current = root.screen1btn()
        Button:
            text: "Go to second screen"
            size_hint: 0.5,0.1
            pos_hint: {"x": 0.35,"y": 0.1}
            on_release:
                app.root.transition = SlideTransition(direction = "right")
                app.root.current = "second"

<SecondScreen>:
    name: "second"
    FloatLayout:
        Label:
            text: "Screen 2"
            font_size: 20
            pos_hint: {"x": 0.35,"y": 0.3}
        Button:
            text: "Go back"
            size_hint: 0.5, 0.1
            pos_hint: {"x": 0.35,"y": 0.1}
            on_release:
                app.root.transition = SlideTransition(direction = "left")
                app.root.current = "first"

                             

1 个答案:

答案 0 :(得分:0)

问题是您的Order按钮的“ kv”代码:

ProductService

不确定该怎么做,但我认为它应该只是打开Popup,如下所示:

    Button:
        text: "Popup"
        size_hint: 0.3,0.1
        pos_hint: {"x": 0.35,"y": 0.4}
        on_release:
            app.root.transition = SlideTransition(direction = "left")
            app.root.current = root.screen1btn()

请注意,引用Popup的两行已被删除。现在,按钮仅打开 Button: text: "Popup" size_hint: 0.3,0.1 pos_hint: {"x": 0.35,"y": 0.4} on_release: root.screen1btn()