【问题标题】:Can't use transitions in kv lang不能在 kv lang 中使用转换
【发布时间】:2016-10-29 16:01:24
【问题描述】:

应用代码:

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/>

【问题讨论】:

  • 这个问题目前还很不清楚,没有针对具体问题。尝试并解释到目前为止您为修复编译器引发的各种错误所做的尝试,以及您到底在哪里苦苦挣扎。
  • 编辑问题并使用按钮{}格式化代码。
  • @Sparky 问题不清楚,作者只是感到困惑,因为这是专门与框架相关的以框架自己的语言处理导入的方式。错误很明显 = NameError: name &lt;something&gt; is not defined.

标签: python python-2.7 kivy kivy-language


【解决方案1】:

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

例子:

#:import FadeTransition kivy.uix.screenmanager.FadeTransition

【讨论】:

  • Keeweusr:抱歉没有具体说明。我是脚本小子和大菜鸟。所以谢谢你的回复
  • @PoornaChandra 我猜他们现在因为格式而对你投了反对票,但问题做得越好,反对票就越少:)
【解决方案2】:

在 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

【讨论】:

    猜你喜欢
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2020-02-13
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多