在Cythoning Kivy App时没有调用__init__

问题描述 投票:0回答:1

所以我已经Cython了我的Kivy应用程序,并得到了一些奇怪的行为。纯KV中定义的任何类都可以工作,纯python中定义的任何类都可以。但是,任何使用两者混合的类都不会调用python init方法。如下例所示,尚未调用MyButton的init。

在MacOS上运行,我使用命令“kivy compile.py build_ext --inplace”编译并使用“kivy main.py”运行main.py。

test.朋友

import kivy

kivy.require('1.10.0')

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder

Builder.load_string('''

<MyButton@Button>:
    size_hint: 0.3, 0.3
    text: 'Has init been called?'

<AParent@FloatLayout>:
    MyButton
''')

class MyButton(Button):
    def __init__(self, **kwargs):
        print('Init called in MyButton!')
        super(MyButton, self).__init__(**kwargs)

class AParent(FloatLayout):
    def __init__(self, **kwargs):
        print('Init called in AParent!')
        super(AParent, self).__init__(**kwargs)

class TestApp(App):
    def build(self):
        return AParent()

compile.朋友

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [
    Extension('test.py',  ['test.py']),
]
setup(
    name = 'test',
    cmdclass = {'build_ext': build_ext},
    ext_modules = ext_modules
)

卖弄.朋友


from test import TestApp

TestApp().run()

我是否错过了一些东西,或者是最好的结果,也许是用纯python写的。提前致谢。

python kivy cython
1个回答
0
投票
<AParent@FloatLayout>:

这是动态kv类声明的语法,它不期望相应的python类。请改用<AParent>

我不清楚你的cython是否重要。代码是原样,是否曾使用过的cython编译版本?

© www.soinside.com 2019 - 2024. All rights reserved.