首页 > 解决方案 > def on_start() 没有被调用,但常规函数可以

问题描述

程序启动时永远不会调用“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], secondary_text=e[2], tertiary_text=e[3 ])) 文件“kivy/properties.pyx”,第 863 行,在 kivy.properties.ObservableDict 中。getattr AttributeError:“超级”对象没有属性“ getattr

标签: pythonkivy

解决方案


如果您希望在输入时自动调用方法screen,请使用on_enter(self)


推荐阅读