单击弹出窗口后,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
.
我是 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
.