Add functions in kivy

Asked

Viewed 340 times

1

I’m a beginner in python and in gera programming, I’m doing a project for the school science fair and need help to add this function to my graphical interface (I’m using python 3.6 and I’m on Ubuntu):

class Assistant(Screen):

def frase(self):
    resp = input('Olá! O meu nome é AVUSA. A sua Assistente Virtual para o Uso Sustentável da Água.\n'
                   'Você você precisa de assistência  quanto ao controle do uso de água na sua residência?')

    if resp == 'sim':
        temChuv = int(input('Então vamos lá! Quanto tempo, em minutos, você gasta debaixo do chuveiro em um dia?:'))

        Lbanho = temChuv * 6

        temVaso = float(input('Beleza! Quantas descargas você costuma dar em um dia?:'))

        LVaso = temVaso * 12

        tempb = float(input('Ok! Quanto tempo, em minutos, você gasta usando a pia do banheiro em um dia?:'))

        Lpb = tempb * 5

        tempc = float(input('Ok! Quanto tempo, em minutos, você gasta usando a pia da cozinha em um dia?:'))
        Lpc = tempc * 6

        temTan = float(input('Ok! Quanto tempo, em minutos, você gasta usando o tanquinho, em um dia?'))
        LTan = temTan * 15

        temMaq = float(input('Beleza! Quantas vezes você utiliza a máquina de lavar roupas por semana?:'))
        LMaq = temMaq * 12

        TotalpDia = float(Lbanho + LVaso + Lpc + Lpb + LMaq + LTan)
        TotalpMes = float(TotalpDia * 31)
        AcreDia = (TotalpDia * 3.14 / 1000)
        AcreMes = (31 * AcreDia)
        conredu = float(AcreMes - 10.54)

        print('Você consome cerca de {:.2f} litros de água por dia!\n'.format(TotalpDia))
        print('E em um mês você consome cerca de {:.2f} litros de água!\n'.format(TotalpMes))
        print(
            'Isto representa um acréscimo de cerca de R${:.2f} por dia e R${:.2f} por mês na sua conta de água\n'.format
            (AcreDia, AcreMes))

        if TotalpDia > 110.0:
            print('A ONU (Organização das Nações Unidas) diz que 110.0 litros por dia são suficientes para\n'
                  'atender as necessidades básicas de consumo e higiene de uma pessoa. ')

            print(
                'Portanto, caso você reduza seu consumo de água de {:.2f} para 110 litros por dia. Conseguirá\numa redução de '
                'cerca de R$ 10.54 na sua conta de água, que passará a ser R${:.2f}, e estará fazendo a sua parte no uso consciente deste recurso.'.format(
                    TotalpDia, conredu))

        else:
            print(
                'Parabéns! Você está dentro do limite do uso diário de água estipulado pela ONU (Organização das Nações Unidas')


    elif resp == 'não':
        print('Tá bom. Se precisar, estarei sempre à sua disposição! :)')

test.Kv:

Menu: name:'menu'

Tarefas:
    name:'tarefas'

Assistente:
    name:'assistente'

: Boxlayout: orientation:'vertical' padding:root.width*0.32, root.height*0.25 Spacing:'25dp' canvas: Color: rgba:1,1,1,1 Rectangle: size:self size. pos:self.pos

    Image:
        source:'logo.png'
        size_hint_y:2.3
        allow_strech:True

    Botao:

        text:'Tarefas'
        on_release:app.root.current = 'tarefas'
        on_release:app.root.transition.direction = 'right'
    Botao:
        text:'Assistente'
        on_release:app.root.current = 'assistente'
        on_release:app.root.transition.direction = 'left'

    Botao:
        text:'Sair'
        on_release:root.confirmacao()

: Boxlayout: orientation:'vertical' canvas: Color: rgba:1,1,1,1 Rectangle: size:self size. pos:self.pos

    ActionBar:
        ActionView:
            ActionPrevious:
                title:'Tarefa'
                on_release:app.root.current = 'menu'


            ActionButton:
                text:'Sair'
                on_release:app.stop()

    ScrollView:
        BoxLayout:
            id:box
            orientation:'vertical'
            size_hint_y:None
            height:self.minimum_height
            color:0,0,0,1   

    BoxLayout:
        size_hint_y:None
        height:'40sp'
        TextInput:
            id:texto

        Button:
            text:'+'
            size_hint_x:None
            width:'40sp'
            on_release:root.addWidget()
            background_color:(0,1,2,1)

: size_hint_y:None height:'100sp' Splitter: strip_size:'3pt' sizable_from:'bottom' Label: id label: font_size:'20sp' color:0,0,0,1

Button:
    text:'X'        
    size_hint_x:None
    width:'40sp'
    on_release:app.root.get_screen('tarefas').removeWidget(root)
    background_color:(0,1,2,1)

: Boxlayout: orientation:'vertical' canvas: Color: rgba:1,1,1,1 Rectangle: size:self size. pos:self.pos

    ActionBar:
        ActionView:
            ActionPrevious:
                title:'Assistente'
                on_release:app.root.current = 'menu'

            ActionButton:
                text:'Sair'
                on_release:app.stop()

    ScrollView:
        BoxLayout:
            id:box
            orientation:'vertical'
            size_hint_y:None
            height:self.minimum_height
            color:0,0,0,1   

    BoxLayout:
        size_hint_y:None
        height:'40sp'
        TextInput:
            id:texto

        Button:
            text:'>'
            size_hint_x:None
            width:'40sp'
            background_color:(0,1,2,1)
            on_release:??????????????

1 answer

0

The command to be refer to a function by code kv would be something like on_press: root.funcao(), but for that, first you would have to build a graphical interface with input, output and well-defined buttons, and not just run the function with the entire Python code.

I reread some of your idea to see how it would work (and to call the function I used a syntax that works on the Python side of the application, which would be the method bind).

from kivy.app import App 
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout  import BoxLayout
from kivy.lang import Builder
from kivy.core.window import Window

Window.size = (360, 640)
Window.clearcolor = [.85, .85, .85, .85]

class RootBox(BoxLayout):
    def __init__(self, **kwargs):
        super(RootBox, self).__init__(**kwargs)

        self.upperbox = BoxLayout(id = 'upper', orientation = 'vertical')
        self.add_widget(self.upperbox)

        self.ti = TextInput(id = 'textinput', text= 'Deseja começar? pressione Sim ', font_size = 30)
        self.upperbox.add_widget(self.ti)

        self.submitbox = BoxLayout(orientation = 'horizontal', padding=30)
        self.upperbox.add_widget(self.submitbox)

        self.btns = Button(id = 'btns', text = 'submit', font_size = 30)
        self.btns.bind(on_press=self.click) #conecta o evento on_press a execução da função click
        self.btns.disabled = True #desabilita botão por default, será habilitado denovo depois pressionamento do botão 'sim'
        self.submitbox.add_widget(self.btns)

        self.si = TextInput(id = 'submitinput', font_size = 30)
        self.submitbox.add_widget(self.si)

        self.lowerbox = BoxLayout()
        self.add_widget(self.lowerbox)

        self.btn1 = Button(id = 'btn1', text = 'Sim', font_size = 30)
        self.btn1.bind(on_press=self.fraseinicial)
        self.lowerbox.add_widget(self.btn1)


    controle =0
    def click(self, num):
        self.controle += 1
        if self.controle ==1:
            self.temchuv = int(self.si.text)
            self.Lbanho = self.temchuv * 6
            print('Lbanho: ', self.Lbanho)
            self.si.text = ''
            self.ti.text ='Beleza! Quantas descargas você costuma dar em um dia?'
            self.controle += 1

        elif self.controle ==3:  
            self.temvaso = int(self.si.text)
            self.LVaso = self.temvaso * 12
            print('LVaso: ', self.LVaso)
            self.si.text = ''
            self.strb = str(self.Lbanho)
            self.strv = str(self.LVaso)
            self.ti.text = "Ok, seu gasto com chuveiro é de " + self.strb + " e gasto com descarga é de " + self.strv
            self.controle += 1

        elif self.controle ==5:
            print('4º output depois do click()')
            self.controle += 1

        elif self.controle ==7:
            print('5º output depois do click()')
            self.controle += 1

        elif self.controle ==9:
            print('etc etc etc')
            self.controle += 1

        else: pass


    def fraseinicial(self, num):
        self.btns.disabled = False
        self.ti.text ='Então vamos lá! Quanto tempo, em minutos, você gasta debaixo do chuveiro em um dia?'
        self.btn1.disabled = True



class PrincipalApp(App):
    def build(self):
        Builder.load_string("""
#:kivy 1.11.0
<RootBox>:
    orientation: 'vertical'
    """)
        return RootBox()

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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.