Проблема в Kivy при доступе к тексту при вводе текста, добавлении экранов и менеджера экранов в программу - PullRequest
0 голосов
/ 05 июня 2018

До создания приложения с несколькими экранами проблем не было, но теперь, когда я сделал его одним, я получаю сообщение об ошибке:

     if self.light_novel_list.adapter.selection:
 AttributeError: 'NoneType' object has no attribute 'adapter'

Всякий раз, когда я нажимаю кнопку удаления при выборе элемента в моем спискеobject.

Когда я получаю ошибку NoneType, я думаю, что я как-то неправильно ссылаюсь на объект в иерархии kivy, но не знаю, как.

Мой соответствующий код:

lightnovel.py:

import kivy
from urllib.request import Request, urlopen
from kivy.uix.screenmanager import ScreenManager, Screen
from bs4 import BeautifulSoup
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.listview import ListItemButton
from kivy.properties import StringProperty

class SavedListButton(ListItemButton):
    pass

class LightNovel(Screen):
    light_novel_text_input = ObjectProperty()
    light_novel_list = ObjectProperty()

    def delete(self):
        if self.light_novel_list.adapter.selection:

            selection = self.light_novel_list.adapter.selection[0].text
            self.light_novel_list.adapter.data.remove(selection)
            self.light_novel_list._trigger_reset_populate()

class Series(Screen):
    pass




class LightNovelApp(App):
    def build(self):
        screen_manager = ScreenManager()
        screen_manager.add_widget(LightNovel(name="screen_one"))
        screen_manager.add_widget(Series(name="screen_two"))
        return screen_manager

lnApp = LightNovelApp()
lnApp.run()

lightnovel.kv:

#: import main lightnovel
#: import ListAdapter kivy.adapters.listadapter.ListAdapter
#: import ListItemButton kivy.uix.listview.ListItemButton


<LightNovel>:
    BoxLayout:
        light_novel_text_input: searchbar
        light_novel_list: saved
        orientation: "vertical"
        id: main
        BoxLayout:
            id: secondbar
            size_hint: 1, .1
            Button:
                id: delete
                size_hint: .5, 1
                text: "Delete"
                on_press: root.delete()
            Button:
                id: goto
                size_hint: .5, 1
                text: "Go to"
                on_press: 
                    root.goto()
                    root.manager.transition.direction = 'left'
                    root.manager.transition.duration = 1
                    root.manager.current = 'screen_two'

        ListView:
            id: saved
            adapter:
                ListAdapter(data=["test"], cls=main.SavedListButton)

Я вырезал ненужный код, чтобы его было легче читать, но все мои self. -ссылки в других моих функциях также терпят неудачу, поэтому я считаю, что ссылаюсь на них неправильно.

1 Ответ

0 голосов
/ 05 июня 2018

Ваша ошибка заключается в том, что вы определяете light_novel_text_input в поле ввода.

<LightNovel>:
    BoxLayout:
        light_novel_text_input: searchbar
        light_novel_list: saved

Когда вы можете этого захотеть, потому что ObjectProperty s принадлежит классу LightNovel:

<LightNovel>:
    light_novel_text_input: searchbar
    light_novel_list: saved
    BoxLayout:
...