def on_start () не вызывается, но обычная функция делает - PullRequest
0 голосов
/ 28 апреля 2020

«on_start» никогда не вызывается при запуске программы, а «filter».

Я не понимаю, почему «фильтр» работает, а «on_start» - нет.

Может ли кто-нибудь помочь мне здесь?

    class Principal(Screen):

def on_start(self):
    conn = sqlite3.connect("data.db", 5)
    c = conn.cursor()
    lista = c.execute('''SELECT * FROM blackbelts''').fetchall()
    for e in lista:
        self.ids.lista.add_widget(ThreeLineListItem(text=e[1], secondary_text=e[2], tertiary_text=e[3]))
    return print(lista)

def filter(self, termo):
    if termo in self.ids.listaitem.text or termo in self.ids.listaitem.secondary_text:
        #self.on_start()
        print("termo encontrado")

    else:
        print("termo não encontrado")

Обновленный и полный код в соответствии с запросом:

from kivymd.app import MDApp
from kivy.app import Builder
import json
import sqlite3
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.uix.list import MDList, ThreeLineListItem


class Principal(Screen):

    def updatelist(self):

        conn = sqlite3.connect("data.db", 5)
        c = conn.cursor()
        lista = c.execute('''SELECT * FROM blackbelts''').fetchall()
        for e in lista:
            self.ids.lista.add_widget(ThreeLineListItem(text=e[1], secondary_text=e[2], tertiary_text=e[3]))
        return

    def filtrar(self, termo):

        if termo in self.ids.listaitem.text or termo in self.ids.listaitem.secondary_text:
            self.ids.lista.clear_widgets()
            self.updatelist()
            print("termo encontrado")

        else:
            print("termo não encontrado")

    def on_enter(self, *args):

        print("tela entrou")
        return


class Segunda(Screen):

    pass


class Terceira(Screen):

    def adicionar(self, nome, faixa, academia, time, datagraduacao):

        conn = sqlite3.connect("data.db",5)
        c = conn.cursor()
        c.execute('''CREATE TABLE IF NOT EXISTS blackbelts (ID INTEGER, nome TEXT, apelido TEXT, academia TEXT, 
        time TEXT,datagraduacao TEXT, PRIMARY KEY(ID, nome) )''')
        conn.commit()
        params = nome, faixa, academia, time, datagraduacao
        c.execute('''INSERT OR IGNORE INTO blackbelts VALUES(NULL,?,?,?,?,?)''', params)
        conn.commit()
        conn.close()
        return True

class BlackBeltAPP(MDApp):

    def build(self):
        KV = Builder.load_file("blackbelt.kv")
        return KV

if __name__ == '__main__':
    BlackBeltAPP().run()

это дает мне getAtrr ошибка выглядит следующим образом:

Файл "/Users/cassio/PycharmProjects/profjiu/main.py", строка 17, в списке обновлений self.ids.lista.add_widget (ThreeLineListItem (text = e [1], second_text = e [2], tertiary_text = e [3])) Файл "kivy / properties.pyx", строка 863, в kivy.properties.ObservableDict. getattr AttributeError: 'супер' объект не имеет атрибута ' GetAttr

1 Ответ

1 голос
/ 28 апреля 2020

Если вы хотите, чтобы метод вызывался автоматически при вводе screen, используйте on_enter(self)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...