不能在 kv lang 中使用转换

Can't use transitions in kv lang

应用代码:

from kivy.app import App
from kivy.lang import Builder
from kivy.factory import Factory
from kivy.uix.screenmanager import Screen
from kivy.uix.screenmanager import ScreenManager
from kivy.uix.screenmanager import FadeTransition<br/>
kv = '''
ScreenManagement:
    transition: FadeTransition()
    screen1:
    screen2:
<screen1>:
    name: 'one'
    Button:
        text: 'Hello!'
        on_release: app.root.current = 'two'
<screen2>:
    name: 'two'
    Button:
        text: 'Hello2'
        on_release: app.root.current = 'one'
'''<br/>
class screen1(Screen):
    pass
class screen2(Screen):
    pass
class ScreenManagement(ScreenManager):
    pass
class test23(App):
    def build(self):
        return Builder.load_string(kv)
        <br/>
if __name__ == '__main__':
    test23().run()

每次执行它时,我都会得到以下回溯。怎么了?

 runfile('/home/pc/python and kivy/test23.py', wdir='/home/pc/python and kivy')<br/>
 Traceback (most recent call last):<br/>
   File "<stdin>", line 1, in <module><br/>
   File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 699, in runfile<br/>
     execfile(filename, namespace)<br/>
   File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 81, in execfile<br/>
     builtins.execfile(filename, *where)<br/>
   File "/home/pc/python and kivy/test23.py", line 42, in <module><br/>
     test23().run()<br/>
   File "/usr/lib/python2.7/dist-packages/kivy/app.py", line 802, in run
     root = self.build()<br/>
   File "/home/pc/python and kivy/test23.py", line 39, in build
     return Builder.load_string(kv)<br/>
   File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 1921, in load_string<br/>
     self._apply_rule(widget, parser.root, parser.root)<br/>
   File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 2130, in _apply_rule
     e), cause=tb)<br/>
 kivy.lang.BuilderException: Parser: File "<inline>", line 3:
 ..<br/>
       1:<br/>
       2:ScreenManagement:<br/>
 >>    3:    transition: FadeTransition()<br/>
       4:    screen1:<br/>
       5:    screen2:<br/>
 ..<br/>
 BuilderException: Parser: File "<inline>", line 3:
 ..<br/>
       1:<br/>
       2:ScreenManagement:<br/>
 >>    3:    transition: FadeTransition()<br/>
       4:    screen1:<br/>
       5:    screen2:<br/>
 ..<br/>
 NameError: name 'FadeTransition' is not defined<br/>
   File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 1742, in create_handler<br/>
     return eval(value, idmap), bound_list<br/>
   File "<string>", line 3, in <module><br/><br/>

   File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 2115, in _apply_rule
     rctx['ids'])<br/>
   File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 1747, in create_handler
     cause=tb)<br/>

转换不是小部件,也不是属性,因此在创建用于解析 .kv 文件或 kv 字符串的环境时默认情况下不会导入它们,因此您需要导入它位于 .kv 文件/字符串的顶部。

示例:

#:import FadeTransition kivy.uix.screenmanager.FadeTransition

在 kv 文件的顶部,您需要导入。要获得过渡,它将是

#: 导入 sm kivy.uix.screenmanager

屏幕管理器: 过渡:sm.FadeTransition() 屏幕 1: 屏幕2: ....

我就是这样做的,这适用于所有转换,完整的文档可以在 https://kivy.org/docs/api-kivy.uix.screenmanager.html

找到

我正在使用 python 2.7 和 kivy 1.10.0