单击弹出窗口后,Kivy ScreenManager 转换不动画

Kivy ScreenManager transitions not animating after pop up is clicked

我是 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"

                             

问题是 Popup 按钮的 'kv' 代码:

    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()

请注意,引用 app.root 的两行已被删除。现在按钮只是打开 Popup.