python - 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 ”
解决方案
如果您希望在输入时自动调用方法screen
,请使用on_enter(self)
推荐阅读
- python - 如何在 Windows 10 上安装特定 Python 版本的包?
- linkedin-api - 如何获取我们页面帖子的所有喜欢计数?#领英
- android - Android 推送通知声音在 android 上丢失(不工作)背景和前景
- asp.net-web-api2 - DryIoc:启用“throwIfUnresolved”总是抛出异常
- javascript - VSCode Javascript - 获取确切的本地新日期()值
- android - Android Firebase UI 更改默认错误消息
- javascript - 如何使用 react-native 将 this.props 传递给 js 文件
- c# - 找到两个拟合的交点
- shell - 根据模式在文件中插入一行
- javascript - 如何修剪
- 和
- 标签,但值
- 会保持不变吗?