Python2.7+Kivy运行test.py报AttributeError: 'NoneType'无text属性求助
Hey there, let's break down why you're hitting this error and how to fix it. That AttributeError means you're trying to access the text property of a variable that's None—in your case, the groupName ObjectProperty in your GroupScreen class isn't properly connected to a Kivy widget.
Here are the most common fixes:
1. Ensure Your KV Code Properly Binds the ObjectProperty
Kivy's ObjectProperty relies on matching the property name to a widget's id in your KV file/string. If this binding is missing or incorrect, groupName stays None.
Example Correct KV Binding:
If you're using Builder.load_string or a separate .kv file, make sure your GroupScreen rule includes the binding:
<GroupScreen>: # Bind the groupName property to the widget with id "group_name_input" groupName: group_name_input TextInput: id: group_name_input hint_text: "Enter group name"
Double-check that the property name (groupName) and the id reference match exactly—Kivy is case-sensitive!
2. Don't Access the Widget Property Too Early
If you're trying to read groupName.text in the __init__ method of GroupScreen, the widget hasn't finished initializing yet, so groupName is still None.
Fix: Use on_enter or a Triggered Method
Wait until the screen is fully loaded to access the widget. Use the on_enter method (called when the screen is switched to) or tie the action to a user event like a button press:
class GroupScreen(Screen): groupName = ObjectProperty() def on_enter(self): # Safe to access here—screen is fully loaded print("Current group name:", self.groupName.text) def on_submit(self): # Or trigger from a button press in KV print("Submitted group name:", self.groupName.text)
3. Verify Your Builder Setup
Make sure you're actually loading the KV code that defines your GroupScreen layout. If you're using Builder.load_file(), confirm the file path is correct. If you're using a .kv file with the same name as your App class (e.g., test.kv for TestApp), ensure it's in the same directory and properly formatted.
Full Working Example
Here's a complete, tested snippet you can adapt to your code:
import kivy kivy.require('1.9.0') from kivy.uix.screenmanager import Screen, ScreenManager 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) # Load KV layout directly Builder.load_string(''' <GroupScreen>: groupName: group_name_input BoxLayout: orientation: 'vertical' padding: 20 spacing: 10 TextInput: id: group_name_input hint_text: "Enter group name" Button: text: "Submit" on_press: root.on_submit() ''') class GroupScreen(Screen): groupName = ObjectProperty() def on_submit(self): # No more AttributeError here! print("Group Name:", self.groupName.text) class TestApp(App): def build(self): sm = ScreenManager() sm.add_widget(GroupScreen(name='group')) return sm if __name__ == '__main__': TestApp().run()
内容的提问来源于stack exchange,提问作者macson taylor

