Python Kivy – Multiple Screens with ScreenManager

Posted by


Neste tutorial, vamos aprender como criar um aplicativo em Python usando o framework Kivy para múltiplas telas usando o ScreenManager.

O ScreenManager é um gerenciador de telas fornecido pelo Kivy que nos permite alternar entre diferentes telas em nosso aplicativo de forma suave e eficiente. Ele nos ajuda a organizar diferentes elementos de nossa interface de usuário em diferentes telas e a alternar entre elas facilmente.

Para começar, certifique-se de ter o Kivy instalado em seu ambiente Python. Você pode instalá-lo usando o pip com o seguinte comando:

pip install kivy

Agora, vamos começar criando nosso aplicativo Kivy e adicionando múltiplas telas usando o ScreenManager. Abra seu editor de texto ou IDE favorito e siga os passos abaixo:

Passo 1: Importar as bibliotecas necessárias

import kivy
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen

Passo 2: Definir as classes das telas

Vamos criar duas classes de tela simples: TelaPrincipal e TelaSecundaria.

class TelaPrincipal(Screen):
    pass

class TelaSecundaria(Screen):
    pass

Passo 3: Definir o ScreenManager e adicionar as telas

Agora vamos criar a classe principal do nosso aplicativo que irá conter o ScreenManager e adicionar nossas telas a ele.

class MultiScreenApp(App):

    def build(self):
        sm = ScreenManager()
        sm.add_widget(TelaPrincipal(name='tela_principal'))
        sm.add_widget(TelaSecundaria(name='tela_secundaria'))

        return sm

Passo 4: Executar o aplicativo

Por fim, vamos instanciar e executar nossa classe MultiScreenApp.

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

Agora, ao executar o aplicativo, você verá duas telas simples: a TelaPrincipal e a TelaSecundaria. Para alternar entre elas, você pode usar o método current do ScreenManager, passando o nome da tela desejada.

Por exemplo, para alternar para a TelaSecundaria a partir da TelaPrincipal, você pode fazer o seguinte:

sm.current = 'tela_secundaria'

Espero que este tutorial tenha sido útil para você aprender como criar múltiplas telas em um aplicativo Python usando o Kivy e o ScreenManager. Você pode expandir este exemplo adicionando mais telas e elementos de interface de usuário conforme necessário. Divirta-se codificando!

0 0 votes
Article Rating
24 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@marcosleno3561
3 months ago

Oh Cabra arretado pra ensinar bem! Obrigado por compartilhar o conhecimento.

@moiss9022
3 months ago

Muito boa aula, irmão!

@ClaudioKenmotsu
3 months ago

Boa explicação, fácil aprendizado. Deus te abençoe sempre.

@jocemarvosskovacs3384
3 months ago

Parabéns! Muito didático! Você dá algum tipo de curso ou assessoria? Já sou programador Python, tendo 2 projetos desenvolvidos e agora estou aprendendo kivy como uma opção de GUI para Desktop. Tenho algumas dúvidas relacionadas a eventos (apertar Tab e ir para o próximo campo do formulário), como integrar a interface gráfica para começar o meu programa python, etc… Obrigado pela atenção. Aguardo seu retorno.

@CAONST_DEV
3 months ago

Muito Bom, Realmente você faz a diferença explicando com detalhes as funcionalidades e tratativas entre métodos, eventos e interação de telas no kivy, PARABENS!

@portinho199
3 months ago

Como sempre, muito bem explicado.
Como vc tinha mencionado em aulas passadas, "referência" é tudo no Kivy.
Não assisti as aulas segintes ainda, mas usando as referências, consegui criar um botão para votar para o Menu (é como eu chamo a primeira tela.)
Fantástico.
Obrigado pelos vídeos!!!

@dhillufc
3 months ago

mano, mas esse gerenciador carrega tudo de uma só vez, fica pesadao se for mais de 5 classes, como muda isso??

@igorbatista5613
3 months ago

MANO EU TE AMO PUTA MERDA TAVA HA mAIS DE DUAS HORAS TENTANDO ARRUMAR ESSE NEGOCIO E VC ME EXPLICOUI EM 10 MIN SEU LINDO <3

@studiolinux
3 months ago

A app que quero desenvolver é beeeemmmmmm simples, e eu quero desenvolver o mais rápido possível, com rescursos visuais. Acho o Kivy muito ruim nesse aspecto, a gente tem de ficar escrevendo o código do widget e rodar para ver o resultado. Esse framework é um excelente esforço, mas tem um caminho bem longo para frente. Em termos de produtividade esse desenvolvimento aí é um atraso, a gente digita num terminal e roda para ver o resultado, sem falar dos erros que o kivy retorna. Não acho uma boa, vou para o Ionic mesmo pq quero rapidez.

@lubarsil
3 months ago

Não consegui achar os arquivos de código para download no site: @t

@Hiagoleof250
3 months ago

Seu curso é ótimo mano. Pra ficar perfeito só falta vc sugerir alguns exercícios no final de cada vídeo.

@Arthur48479
3 months ago

O meu so apareçe uma tela preta

@brunodominice7813
3 months ago

Muito bom Professor, show de bola, uma dúvida como faríamos se quiséssemos voltar a tela anterior, a tela de 'ver tarefas'.

@joaogali97
3 months ago

Ótimo vídeo, como sempre. Me tire uma dúvida, por gentileza: e ao referenciar um objeto a partir do código Python (não do código Kivy como vc demonstrou)? Como devemos fazer? Depois de transformar minha classe Login de BoxLayout para Screen (dei a ela o nome TelaLogin), não consigo mais referenciar o objeto login por meio do ids, pois gera o erro "TypeError: 'kivy.properties.ListProperty' object is not iterable":

class Login(Screen):

def __init__(self, **kwargs):

super(Login, self).__init__(**kwargs)

Gerenciador.get_screen(Gerenciador, "TelaLogin").ids.login.bind(text = self.verificartamanhologin, focus = self.focuslogin)

Gerenciador.get_screen(Gerenciador, "TelaLogin").ids.senha.bind(text = self.verificartamanhosenha)

Já experimentei de tudo, e sempre gera um erro distinto. Tem alguma dica? Grato.

@InsanosGAMEPLAYBR
3 months ago

Boa noite
Eu criei um gerenciador para SCREEN LOGIN e uma SCREEN APP, só que dentro dessa SCREEN APP eu criei um outro gerenciador para as screens referentes aos itens do menu e eu gostaria de dar um print de um item de TextInput das subSCREENS e não estou conseguindo. Tem como?

@anonimo123-r8k
3 months ago

Explicação sensacional…quanto mais eu avanço mais complicado fica

@Joallyson
3 months ago

Muito bom Will, tks tks!!

@paideliz
3 months ago

Wiil, e se eu não quiser criar telas. Se eu quiser usar uma unica tela e ao clicar em algum botão/função uma area reservada no layout alterar de acordo o opção clicada.

@joseguilhermeamuchastegui9970
3 months ago

Você sabe como colocar gráficos utilizando o matplotlib e considerando mais de uma tela (screen)?
Por exemplo, tela 01 com botão e tela 02 com o gráfico.

@Ownig3
3 months ago

Boa noite Wills, seguindo oq já tinha sido aprendido fiz uma estrutura da seguinte forma:
[menu( que sai ou vai para a opção ->) seleção de tarefas ( que ao inves de labels, tem botões que faz uma seleção de tarefas desses botões ->) seleção de labels com as tarefas realizadas da função:
Exemplo PC da xuxa -> (tarefas feitas) [aberto, revisado hd, memorias ok, fonte ok, curto identificado entre conector de carga e pwm]
O problema é que se eu crio outra tarefa ( E do jeito que você passou, a gente cria uma nova instancia de Tarefa ) aparece as tarefas desse PC da xuxa, e se eu deletar nessa nova instancia, é deletado na instancia anterior, tem como ajudar nessa questão?Obrigado e ótimas aulas!