'Kivy: how to Restart App after press a button
I'm trying to restart my app when I change the language.
When I press the button to change language, the button's text lost it's position. When I close the application and open again, the text is in the right position.
I couldn't find anything like that, so I'd like to know if it's possible to restart the app for the text keep on the right position.
Code below:
PYTHON
from kivymd.app import MDApp
from kivymd.uix.floatlayout import FloatLayout
from kivymd.uix.button import MDRectangleFlatButton
from kivy.lang import Builder
import sqlite3
from kivy.uix.scrollview import ScrollView
from kivy.metrics import dp
from kivymd.uix.menu import MDDropdownMenu
KV = '''
ScreenManager:
Screen:
name: 'telaCategorias'
BoxLayout:
orientation: 'vertical'
MDToolbar:
id: tbCategoria
right_action_items: [["dots-vertical", lambda x: app.callback_lang(x)]]
md_bg_color: 0, 0, 0, 1
Categorias:
id: categoria
<Categorias>:
ScrollView:
MDList:
padding: '5dp'
MDRoundFlatIconButton:
id: btCat1
text: 'teste'
icon: 'glass-cocktail'
font_size: '20sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
MDRoundFlatIconButton:
id: btCat2
icon: 'cupcake'
font_size: '20sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
MDRoundFlatIconButton:
id: btCat3
icon: 'food-steak'
font_size: '20sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
MDRoundFlatIconButton:
id: btCat4
icon: 'hamburger'
font_size: '20sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
MDRoundFlatIconButton:
id: btCat5
icon: 'pasta'
font_size: '20sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
MDRoundFlatIconButton:
id: btCat6
icon: 'fish'
font_size: '20sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
MDRoundFlatIconButton:
id: btCat7
icon: 'food-turkey'
font_size: '20sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
MDRoundFlatIconButton:
id: btCat8
icon: 'soy-sauce'
font_size: '19sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
MDRoundFlatIconButton:
id: btCat9
icon: 'food-fork-drink'
font_size: '20sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
MDRoundFlatIconButton:
id: btCat10
icon: 'food-variant'
font_size: '20sp'
size_hint: (1, None)
halign: 'left'
line_color: (128/255,128/255,128/255)
text_color: 0,2,0,1
icon_color: 0,0,0,1
'''
class Categorias(FloatLayout):
pass
class Aplicativo(MDApp):
def on_start(self):
self.menuLang()
self.loadLang()
def build(self):
conn = sqlite3.connect('recipeDB.db')
c = conn.cursor()
c.execute("CREATE TABLE if not exists config (id integer primary key, name text)")
self.insertLang()
conn.commit()
conn.close()
return Builder.load_string(KV)
def menuLang(self):
menu_items = [{"viewclass":"MDRectangleFlatButton","text": "PT-BR","height": dp(35), "line_color": [0, 0, 1, 0], "text_color": [0, 0, 0, 1], "on_release": self.changePTBRLang,}, {"viewclass": "MDRectangleFlatButton","text": "EN","height": dp(50),"on_release": self.changeENLang,}]
self.menu = MDDropdownMenu(items=menu_items,width_mult=2,)
def callback_lang(self, button):
self.menu.caller = button
self.menu.open()
def insertLang(self):
conn = sqlite3.connect('recipeDB.db')
c = conn.cursor()
c.execute("INSERT OR IGNORE INTO config VALUES (:id, :name)", {'id': '1', 'name': 'EN',})
conn.commit()
conn.close()
def loadLang(self):
conn = sqlite3.connect('recipeDB.db')
c = conn.cursor()
c.execute("SELECT * FROM config")
records = c.fetchall()
for record in records:
if record[1] == 'EN':
self.changeENLang()
elif record[1] == 'PT-BR':
self.changePTBRLang()
conn.commit()
conn.close()
def saveLang(self):
conn = sqlite3.connect('recipeDB.db')
c = conn.cursor()
if self.codLang == '1':
c.execute("UPDATE config set name = 'EN' where id = 1")
elif self.codLang == '2':
c.execute("UPDATE config set name = 'PT-BR' where id = 1")
conn.commit()
conn.close()
codLang = '1'
def changeENLang(self):
self.codLang = '1'
self.saveLang()
self.root.ids.tbCategoria.title = 'CATEGORIES'
self.root.ids.categoria.ids.btCat1.text = ' DRINKS'
self.root.ids.categoria.ids.btCat2.text = ' CAKES AND SWEET PIES'
self.root.ids.categoria.ids.btCat3.text = ' MEAT'
self.root.ids.categoria.ids.btCat4.text = ' SNACKS'
self.root.ids.categoria.ids.btCat5.text = ' BREADS AND PASTA'
self.root.ids.categoria.ids.btCat6.text = ' FISHES AND SEA FOOD'
self.root.ids.categoria.ids.btCat7.text = ' SPECIAL DISHES'
self.root.ids.categoria.ids.btCat8.text = ' SALADS, SAUCES AND SIDE DISHES'
self.root.ids.categoria.ids.btCat9.text = ' DESSERTS'
self.root.ids.categoria.ids.btCat10.text = ' SOUP'
self.menu.dismiss()
def changePTBRLang(self):
self.codLang = '2'
self.saveLang()
self.root.ids.tbCategoria.title = 'CATEGORIAS'
self.root.ids.categoria.ids.btCat1.text = ' BEBIDAS'
self.root.ids.categoria.ids.btCat2.text = ' BOLOS E TORTAS DOCES'
self.root.ids.categoria.ids.btCat3.text = ' CARNES E AVES'
self.root.ids.categoria.ids.btCat4.text = ' LANCHES'
self.root.ids.categoria.ids.btCat5.text = ' PÃES E MASSAS'
self.root.ids.categoria.ids.btCat6.text = ' PEIXES E FRUTOS DO MAR'
self.root.ids.categoria.ids.btCat7.text = ' PRATOS ESPECIAIS'
self.root.ids.categoria.ids.btCat8.text = ' SALADAS, MOLHOS E ACOMPANHAMENTOS'
self.root.ids.categoria.ids.btCat9.text = ' SOBREMESAS'
self.root.ids.categoria.ids.btCat10.text = ' SOPAS'
self.menu.dismiss()
Aplicativo().run()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
