Итак, я запустил приложение Kivy и получил странное поведение.Любой класс, определенный в чистом KV, работает, любой класс, определенный в чистом Python, работает.Однако любой класс, использующий гибрид этих двух типов, не будет вызывать метод python init .Как видно из приведенного ниже примера, init MyButton не был вызван.
Работая на MacOS, я скомпилировал команду «kivy compile.py build_ext --inplace» и запустил main.py с «kivy main»..py ".
test.py
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.py
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
)
main.py
from test import TestApp
TestApp().run()
Я что-то пропустилили это лучший результат, чтобы написать это на чистом питоне.Заранее спасибо.