【问题标题】:in __init__ word=self.search_box.text AttributeError: 'NoneType' object has no attribute 'text'在 __init__ word=self.search_box.text AttributeError: 'NoneType' 对象没有属性 'text'
【发布时间】:2018-03-01 15:59:12
【问题描述】:

我正在制作一个应用程序。据我所知,我做的事情正确,但仍然出现此错误

word=self.search_box.text AttributeError: 'NoneType' 对象没有属性 'text'

我检查了拼写错误和其他常见错误,但仍然无法正常工作。

这是代码-

import kivy
kivy.require('1.10.0')

from kivy.uix.stacklayout import StackLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label 
from kivy.app import App
from kivy.uix.popup import Popup  
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.lang import Builder 
from kivy.properties import ObjectProperty
from kivy.uix.textinput import TextInput
from kivy.properties import StringProperty


import json

Builder.load_file('VocabularyJournal.kv')

class MenuPage(Screen):
    pass

class DisplayPage(Screen):
    search_box= ObjectProperty()
    label_maening=StringProperty()
    label_synonym=StringProperty()
    label_ant=StringProperty()
    label_sentence=StringProperty()


    def __init__(self, **kwargs):
        super(DisplayPage,self).__init__(**kwargs)
        with open('vocab_words.json') as rfile:
            data=json.load(rfile)

        word=self.search_box.text               #the error occurred here 

        for value in data:
            if value['word']==word:
                self.label_maening=value['meaning']
                self.label_synonym=value['synonym']
                self.label_ant=value['antonyms']
                self.label_sentence=value['sentence']


class WordInsertPage(Screen):
    pass


class NewWordPage(Screen):
    word_box = ObjectProperty()
    meaning_box = ObjectProperty()
    synonym_box = ObjectProperty()
    ant_box = ObjectProperty()
    sentence_box = ObjectProperty()


    def saving_data(self):

        with open('vocab_words.json') as rfile:
            data=json.load(rfile)


        entry={'word': self.word_box.text, 'meaning': self.meaning_box.text, 'synonym': self.synonym_box.text, 'antonyms': self.ant_box.text, 'sentence': self.sentence_box.text}
        data.append(entry)


        with open('vocab_words.json','w') as wfile:
            json.dump(data,wfile,indent=4)


class FlashCard(Screen):
    pass

class WordGroups(Screen):
    pass

class Manager(ScreenManager):
    pass

class VocabularyJournalApp(App):
    def build(self):
        return Manager()

object = VocabularyJournalApp()
object.run()

这是kv代码-

<Manager>:
    MenuPage:
        name: 'menu'
    WordInsertPage:
        name: 'insertword'
    NewWordPage:
        name: 'newword'
    FlashCard:
        name: 'flashcard'
    WordGroups:
        name: 'wordgroup'
    DisplayPage:
        name: 'display'

<MenuPage>:
    Label: 
        text: "Vocabulary Journal"
        size_hint: .90,.10

    StackLayout:
        orientation: 'tb-rl'
        spacing: 10
        padding: 10

        Button:
            text: 'Search'
            size_hint: None,.20
            width: 130
            background_down:'darkgrey.png'
            on_press: root.manager.current='insertword'
        Button:
            text: 'New Word'
            size_hint: None,.20
            width: 130
            background_down:'darkgrey.png'
            on_press: root.manager.current='insertword'
        Button:
            text: 'Flash Cards'
            size_hint: None,.20
            width: 130
            background_down:'darkgrey.png'
            on_press: root.manager.current='flashcard'

        Button:
            text: 'Word Groups'
            size_hint: None,.20
            width: 130
            background_down:'darkgrey.png'
            on_press: root.manager.current='wordgroup'

<WordInsertPage>:

    FloatLayout:

        Button: 
            text: "New Word"
            on_press: root.manager.current='newword'
            font_size: 30
            color: 0,0,0,1
            size_hint: .2, .1
            pos_hint: {"center_x": .5, "center_y": 0.3}
            background_down: 'darkgrey.png'
        Button:
            text: "search word"
            on_press: root.manager.current='display'
            font_size: 30
            color: 0,0,0,1
            size_hint: .2, .1
            pos_hint: {"center_x": .5, "center_y": 0.5}
            background_down: 'darkgrey.png'
        Button:
            text: 'Flash Cards'
            on_press: root.manager.current="flashcard"
            font_size: 30
            color: 0,0,0,1
            size_hint: .2, .1
            pos_hint: {"center_x": .5, "center_y": 0.7}
            background_down: 'darkgrey.png'



<NewWordPage>:
    id: refer_to_it
    word_box: word_input
    meaning_box: meaning_input
    synonym_box: Synonym_input
    ant_box: ant_input
    sentence_box: sentence_input
    StackLayout:
        orientation: 'tb-rl'
        spacing: 10
        padding: 90
        TextInput:
            text: "write your word here"
            color: 1,1,1,1
            id: word_input
            width: 300
            size_hint: None, .10

        TextInput:
            text: "write meaning of your word here"
            color: 1,1,1,1
            id: meaning_input
            width: 600
            size_hint: None, .20

        TextInput:
            text: "write Synonyms of your word here"
            color: 1,1,1,1
            id: Synonym_input
            width: 600
            size_hint: None, .20

        TextInput:
            text: "write antonyms of your text here"
            color: 1,1,1,1
            id: ant_input
            width: 600
            size_hint: None, .20

        TextInput:
            text: "write a sentence based on your word here"
            color: 1,1,1,1
            id: sentence_input
            width: 600
            size_hint: None, .20

        Button:
            text: 'Save'
            size_hint: None,.10
            width: 130
            background_down:'darkgrey.png'
            on_press: refer_to_it.saving_data()     

<DisplayPage>:
    search_box: search_text  # search_box is the reference to the textinput in py file
    BoxLayout:
        size_hint_y: None
        height: '48dp'

        TextInput:
            text:'enter the word you wanna search here'
            id: search_text


        ToggleButton:
            id: tog
            text: 'Horizontal'
            group: 'accordion'
            state: 'down'

        ToggleButton:
            text: 'Vertical'
            group: 'accordion'

    Accordion:
        orientation: 'horizontal' if tog.state == 'down' else 'vertical'    

        AccordionItem:
            title:'meaning'

            Label:
                text: root.label_maening
                text_size: self.width, None

        AccordionItem:
            title:'Synonym'

            Label:
                text: root.label_synonym
                text_size: self.width, None

        AccordionItem:
            title:'Antonym'

            Label:
                text: root.label_ant
                text_size: self.width, None

        AccordionItem:
            title:'Sentence'

            Label:
                text: root.label_sentence
                text_size: self.width, None

【问题讨论】:

  • 您的代码只生成一个没有内容的窗口,并且除了导入之外没有显示任何错误
  • @eyllanesc 我已经编辑过了。我在这里提供了完整的代码。
  • 当你想要完成搜索时,我觉得你想在构造函数中这样做很奇怪?

标签: python kivy


【解决方案1】:

问题是因为children没有卡在parent的构造函数中,它会稍后执行,所以search_box会在构造函数中为None,解决方法是在帮助完成构造函数后立即执行它时钟:

from kivy.clock import Clock


class DisplayPage(Screen):
    search_box= ObjectProperty()
    label_maening=StringProperty()
    label_synonym=StringProperty()
    label_ant=StringProperty()
    label_sentence=StringProperty()


    def __init__(self, **kwargs):
        super(DisplayPage,self).__init__(**kwargs)
        Clock.schedule_once(self.callback)

    def callback(self, dt):
        with open('vocab_words.json') as rfile:
            data=json.load(rfile)

        word=self.search_box.text               #the error occurred here 

        for value in data:
            if value['word']==word:
                self.label_maening=value['meaning']
                self.label_synonym=value['synonym']
                self.label_ant=value['antonyms']
                self.label_sentence=value['sentence']

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2022-08-18
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多