我刚开始用kivy创建一个新应用,而当尝试从应用类中调用StringProperty kujund时,我根本不明白为什么它给我一个错误。
蟒蛇:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
from kivy.clock import Clock
kv = Builder.load_file("autogeo.kv")
kujund = "null"
class autogeo(App):
manager = ScreenManager()
Screen1 = Screen(name="esimene")
Screen2 = Screen(name='teine')
Screen3 = Screen(name="kolmas")
Screen4 = Screen(name='neljas')
Screen5 = Screen(name="viies")
kujund = StringProperty()
def update(self, *args):
pass
def build(self):
Clock.schedule_interval(self.update, 0.1)
return kv
if __name__ == "__main__":
autogeo().run()
Kv:
ScreenManager:
id: manager
size: root.width, root.height
Screen:
name: "esimene"
GridLayout:
cols: 2
rows: 3
Button:
text: "ruut"
on_press:
manager.current = "teine"
manager.transition.direction ="left"
app.kujund: "ruut"
Button:
text: "ristkylik"
on_press:
manager.current = "teine"
manager.transition.direction ="left"
Button:
text: "kolmnurk"
on_press:
manager.current = "teine"
manager.transition.direction ="left"
Button:
text: "taisnurkne kolmnurk"
on_press:
manager.current = "teine"
manager.transition.direction ="left"
Button:
text: "ring"
on_press:
manager.current = "teine"
manager.transition.direction ="left"
Button:
text: "vordhaarne trapets"
on_press:
manager.current = "teine"
manager.transition.direction ="left"
Screen:
name: "teine"
FloatLayout:
Label:
text: "Valisid kujundi " + app.kujund
font_size: self.width * 0.1
Button:
text: "tagasi"
size_hint: 1, 0.2
on_press:
manager.current = "esimene"
manager.transition.direction = "right"
追溯:
Traceback (most recent call last):
File "C:\Users\ricsi\Anaconda3\lib\site-packages\kivy\lang\builder.py", line 249, in create_handler
return eval(value, idmap), bound_list
File "C:\Users\ricsi\PycharmProjects\ToolsforMaths\autogeo.kv", line 46, in <module>
text: "Valisid kujundi " + app.kujund
File "C:\Users\ricsi\Anaconda3\lib\site-packages\kivy\lang\parser.py", line 75, in __getattribute__
object.__getattribute__(self, '_ensure_app')()
File "C:\Users\ricsi\Anaconda3\lib\site-packages\kivy\lang\parser.py", line 70, in _ensure_app
app.bind(on_stop=lambda instance:
AttributeError: 'NoneType' object has no attribute 'bind'
在创建“ app”之前,您正在加载使用“ app”的.kv,因此没有错误引发该错误。解决方案是在创建“ app”(例如构建方法)之后对其进行解析。
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
from kivy.clock import Clock
class autogeo(App):
manager = ScreenManager()
Screen1 = Screen(name="esimene")
Screen2 = Screen(name="teine")
Screen3 = Screen(name="kolmas")
Screen4 = Screen(name="neljas")
Screen5 = Screen(name="viies")
kujund = StringProperty()
def update(self, *args):
pass
def build(self):
kv = Builder.load_file("autogeo.kv")
Clock.schedule_interval(self.update, 0.1)
return kv
if __name__ == "__main__":
autogeo().run()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句