AttributeError:'NoneType'对象在python中没有属性'text'
问题描述
我正在使用 python-2.7
和 kivy
.当我运行 test.py
然后它给出错误 AttributeError: 'NoneType'对象在python中没有属性'text'
?
谁能告诉我什么是错误?
I am using python-2.7
and kivy
.When i run test.py
then it gives error AttributeError: 'NoneType' object has no attribute 'text' in python
?
Someone tell me what is mistake?
import kivy
kivy.require('1.9.0') # replace with your current kivy version !
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.properties import ObjectProperty
Window.size = (500, 230)
class GroupScreen(Screen):
groupName = ObjectProperty(None)
def __init__(self, **kwargs):
super(GroupScreen, self).__init__(**kwargs)
self.groupName.text = "Test"
class Group(App):
def build(self):
self.root = Builder.load_file('test.kv')
return self.root
if __name__ == '__main__':
Group().run()
test.kv
GroupScreen:
groupName:groupName
GridLayout:
cols: 2
padding : 30,30
spacing: 10, 10
row_default_height: '40dp'
Label:
text: 'Test'
SingleLineTextInput:
id: groupName
GreenButton:
text: 'Ok'
GreenButton:
text: 'Cancel'
Label:
Label:
<SingleLineTextInput@TextInput>:
multiline: False
<GreenButton@Button>:
background_color: 1, 1, 1, 1
size_hint_y: None
height: self.parent.height * 0.150
解决方案
如果要在.kv中创建对象:
If you are going to create the object in the .kv:
GroupScreen:
groupName:groupName
...
那么就不用在.py中声明了.
Then it is not necessary to declare it in the .py.
另一方面,向小部件添加子代不是即时的,因此在这些情况下始终建议使用 Clock
.
On the other hand the addition of children to a widget is not instantaneous so it is always recommended in these cases to use Clock
.
import kivy
kivy.require('1.9.0') # replace with your current kivy version !
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.clock import Clock
Window.size = (500, 230)
class GroupScreen(Screen):
def __init__(self, **kwargs):
super(GroupScreen, self).__init__(**kwargs)
Clock.schedule_once(lambda dt: setattr(self.groupName, 'text', "Test"))
class Group(App):
def build(self):
self.root = Builder.load_file('test.kv')
return self.root
if __name__ == '__main__':
Group().run()
相关文章