Кнопки перезагрузки Kivy (через функцию) при запуске приложенияPython

Программы на Python
Ответить
Anonymous
 Кнопки перезагрузки Kivy (через функцию) при запуске приложения

Сообщение Anonymous »

Я пытаюсь создать приложение для дел. У меня есть таблица в sqlite3, в которой хранится некоторая информация. Я хотел бы вызвать функцию, которая запрашивает эту таблицу при запуске приложения.
Вот мой код:
Python:

Код: Выделить всё

import sqlite3
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.togglebutton import ToggleButton
from kivy.clock import Clock
from kivy.uix.floatlayout import FloatLayout
from functools import partial

class GetLinksButton(Button):

def get_caption(self):
#       DEFINIZIONE CHE SI POTREBBE FARE IN KV .. CREAZIONE POPUP CON 2 BOTTONI E TEXTINPUT
content = BoxLayout(orientation='vertical')
txt = TextInput(text = "",focus=False,multiline=False,size_hint=(1,0.2),font_size= 40)
content.add_widget(txt)
mybutton = Button(text='Add',size_hint=(1,0.2),font_size=20)
mybutton2 = Button(text='Close',size_hint=(1,0.2),font_size=20)
content.add_widget(mybutton)
content.add_widget(mybutton2)

mypopup = Popup(title = 'Add item to list',
content = content,
size_hint = (1, 0.4),
auto_dismiss = False,
).open()

def saveTxt(tt):
mypopup.dismiss()   # FUNZIONE CHIAMATA, CHIUSURA POPUP
try:
self.set_caption(txt.text)  # CHIAMA FUNZIONE DI CREAZIONE BOTTONE CON ARG IL CAPTURE DEL TESTO IN TEXTBOX
except:
pass

mybutton.bind(on_press = saveTxt)  # CHIAMA FUNZIONE DI CAPTURE DEL TESTO E CHIUSURA POPUP
txt.bind(on_text_validate = saveTxt)# CHIAMA FUNZIONE DI CAPTURE DEL TESTO E CHIUSURA POPUP
mybutton2.bind(on_press = mypopup.dismiss)

#   FUNZIONE CHIAMATA PER INSERIMENTO NUOVO BOTTONE IN TABELLA LOCALTB
def btn_db(self,st):
#con = None
elementList =[]
print "stringa dentro a dtn_db "+ st

try:
con = sqlite3.connect('localdb.db')
cur = con.cursor()
cur.execute("insert into localtb (Item, State) values ( ?, ?)",(st, 0))
con.commit()
cur.execute("select * from localtb")
data = cur.fetchall()
con.close()
for x in data:
print x
elementList.append(x[0])
except:
print "non va"
w = str(elementList)
return w

#   CREAZIONE BOTTONE DA INPUTO DI TESTO , TEXT BUTTON == INPUT INSERITO IN BOX
def set_caption(self,stringa):
string = stringa[0].upper()+stringa[1:].lower()
print string, " stringa prima del for"
# DA SISTEMARE CICLO "INUTILE"
#for i in range(1):
link_button = LinkButton(
text = string)
print "tra for e add_widget"
self.links_grid.add_widget(link_button)
print string," strinda PRIMA call a btn_db"
self.btn_db(string)          # CALL A FUNZIONE PER INSERIRE IL BOTTONE IN TABELLA LOCALE (LOCALTB)
print string," strinda DOPO call a btn_db"

class LinkButton(ToggleButton):

#   GESTIONE DEL TOGGLE..  QUNANDO SI TOGGLA IL BOTTONE PARTE LA QUERY E INVERTE LO STATO ATTUALE CON L'ALTRO STATO , DA 0 A 1 E VICEVERSA PER IL BOTTONE PREMUTO
def toggleState(self):
#con = None
red = (83,0,0,1)
green = (0,83,0,1)
print self.background_color
if self.background_color == [83,0,0,1]:
self.background_color = green
else:
print "dentro ELSE"
self.background_color = red
elementList =[]
pressed = str(self.text)
print "tasto premuto cambio stato: "+pressed
try:
con = sqlite3.connect('localdb.db')
cur = con.cursor()
cur.execute("update localtb set State = (CASE WHEN State = 0 THEN State + 1 WHEN State = 1 THEN State - 1 end ) WHERE Item = ?",(pressed,))  # ATTENTO ALLA VIRGOLA DOPO PRESSED(SE NON NON FUNZIONA)
con.commit()
cur.execute("select * from localtb")
data = cur.fetchall()
con.close()
for x in data:
print x
elementList.append(x[0])
except:
print "non va"
w = str(elementList)
return w

class SmsButton(Button):

#   PROVE DI RELOAD SESSIONE PRECENDETE- FALLITE.
def reloadSession(self):
try:
con = sqlite3.connect('localdb.db')
cur = con.cursor()
cur.execute("select * from localtb")
data = cur.fetchall()
con.close()
for x in data:
reload_Element = str(x[0])
if x[1] == 0:
print "in if: ", x[1]
link_button = LinkButton(text = reload_Element,background_color = [83,0,0,1])
else:
print "in else: ", x[1]
link_button = LinkButton(text = reload_Element,background_color = [0,83,0,1])
self.links_grid.add_widget(link_button)
except Exception as inst:
print inst.args
print "non va"

class Test(App):
pass

if __name__ == '__main__':
Test().run()
КВ:

Код: Выделить всё

#:kivy 1.9.1

MyRootasdasd:
rows: 1
RightArea:

:
#rows: 1
#RightArea:

:
cols: 1
size_hint_x: 0.3
spacing: '1dp'

ScrollView:
LinksGrid:
id: links_grid

BoxLayout:
size_hint: (1,0.08)

GetLinksButton:
links_grid: links_grid

SmsButton:
links_grid: links_grid

:
cols: 2
spacing: '.5dp'
size_hint_y: None
height: self.minimum_height

:
size_hint_y: 1
text: 'SMS'
on_press: self.reloadSession()

:

size_hint_y: 1
text: 'Get links'
on_press: self.get_caption()

:
color: (0, 0, 0, 1)   #COLORE TESTO
background_normal: '' # RESET DELLA TINTA (STRINGA, quindi carica un immagine non un colore)
background_color: (83, 0, 0, 1) #COLORE SFONDO -> qui sotto la call alla classe che gestisce il toggle del bottone
on_release: self.toggleState()
size_hint_y: None
height: '80dp'
Функция, которую мне нужно вызвать, — это reloadSession, которая запросит таблицу, а затем с получением информации создаст n кнопок.
Как вы можете видеть, в классе SmsButton (в KV) вызывает эту функцию (ON_PRESS). Как я могу это сделать, но автоматически при запуске приложения?
Я пробовал использовать функцию сборки в alla, но получаю эту ошибку:
(«Объект «Тест» не имеет атрибута «links_grid»»,)
сейчас я использую следующий код..

Код: Выделить всё

class Test(App):
def build(self):
try:
con = sqlite3.connect('localdb.db')
cur = con.cursor()
cur.execute("select * from localtb")
data = cur.fetchall()
con.close()
for x in data:
reload_Element = str(x[0])
if x[1] == 0:
print "in if: ", x[1]
link_button = LinkButton(text = reload_Element,background_color = [83,0,0,1])
else:
print "in else: ", x[1]
link_button = LinkButton(text = reload_Element,background_color = [0,83,0,1])
self.links_grid.add_widget(link_button)
except Exception as inst:
print inst.args
print "non va"
Тестовый класс не имеет атрибута linked_grid.

Подробнее здесь: https://stackoverflow.com/questions/358 ... pp-startup
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»