是否可以打开一个带有某种过渡的弹出窗口,因为我们在屏幕中有过渡

时间:2014-04-22 08:56:43

标签: python popup kivy

我们可以在打开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()

1 个答案:

答案 0 :(得分:2)

  

例如,在打开Screen时,我们可以使用transition = FallOutTransition()

这是由ScreenManager完成的,而不是屏幕。

  

如果没有:我正在考虑创建一个自定义弹出窗口,我可以使用屏幕类并对其进行转换,但我无法弄明白。

除非您以某种方式使用ScreenManager,否则无法使用。

你提到的FallOutTransition实际上使用了一个着色器效果,如果你不知道你在做什么(这并不难,但也没有真正记录下来的话),在屏幕管理器之外复制是很棘手的。

但是,使用普通的kivy动画可以获得几乎相同的效果。您可以启动比您真正想要的略小的弹出窗口,并且不透明度为0,然后将其大小设置为您真正想要的大小并将其不透明度设置为1。