我们可以在打开Popup时添加任何转换。例如,当我们打开屏幕时,我们可以拥有 transition = FallOutTransition()。弹出窗口是否可以这样做。
如果没有: 我正在考虑创建一个自定义弹出窗口,我可以使用屏幕类并对其进行转换,但我无法弄明白。任何人都有任何想法?请参阅以下示例代码:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen,FallOutTransition
from kivy.clock import Clock
from kivy.core.window import Window
from kivy.uix.popup import Popup
from kivy.uix.label import Label
class CPopup(Screen,Popup):
def __init__(self, **kwargs):
super(CPopup, self).__init__(**kwargs)
self.transition= FallOutTransition()
#self.title = "i am popup ... lol"
class A(Screen):
def __init__(self, **kwargs):
super(A, self).__init__(**kwargs)
self.transition= FallOutTransition()
self.add_widget(Label(text="I am label on the main Widget !"))
popup = Popup(title="hello i am a simple Popup",content=Label(text="i am popup content"),size_hint=(None, None), size=(Window.height, Window.width/4))
popup.open()
popup.bind(on_open=self.on_open)
def on_open(self,instance):
print "hi popup was opened"
Clock.schedule_once(instance.dismiss,2)
# App Class
class MyJBApp(App):
def build(self):
sm = ScreenManager(transition= FallOutTransition())
sm.add_widget(A(name='A'))
return sm
if __name__ == '__main__':
MyJBApp().run()
答案 0 :(得分:2)
例如,在打开Screen时,我们可以使用transition = FallOutTransition()
这是由ScreenManager完成的,而不是屏幕。
如果没有:我正在考虑创建一个自定义弹出窗口,我可以使用屏幕类并对其进行转换,但我无法弄明白。
除非您以某种方式使用ScreenManager,否则无法使用。
你提到的FallOutTransition实际上使用了一个着色器效果,如果你不知道你在做什么(这并不难,但也没有真正记录下来的话),在屏幕管理器之外复制是很棘手的。
但是,使用普通的kivy动画可以获得几乎相同的效果。您可以启动比您真正想要的略小的弹出窗口,并且不透明度为0,然后将其大小设置为您真正想要的大小并将其不透明度设置为1。