Live de Python #202
Roteiro
1. Sobre o PySimpleGUI 4. Sistema de eventos
Como executar as ações da interface
Uma apresentação da biblioteca
2. Widgets, Window e Layouts 5. Playground
O core da lib Bora fazer alguma tela, pq não?
3. Temas 6. Pontos de atenção
Uma vasta e diversa lista A hora de falar sério
[Link]/dunossauro [Link]/livedepython [Link]@[Link]
Ajude o projeto <3
Acássio Anjos, Ademar Peixoto, Alexandre Harano, Alexandre Souza, Alexandre Takahashi, Alexandre Villares, Alex Lima,
Alynne Ferreira, Alysson Oliveira, Ana Carneiro, Ana Padovan, Andre Azevedo, André Rocha, Aquiles Coutinho, Arnaldo
Turque, Ayrton Santana, Bloquearsites Farewall, Bruno Barcellos, Bruno Freitas, Bruno Guizi, Bruno Oliveira, Bruno Ramos,
Caio Nascimento, César Almeida, Christiano Morais, Clara Battesini, Daniel Freitas, Daniel Haas, Danilo Segura, Dartz Dartz,
David Kwast, Delton Porfiro, Dhyeives Rodovalho, Diego Farias, Diego Guimarães, Dilenon Delfino, Douglas Bastos, Douglas
Braga, Douglas Martins, Douglas Zickuhr, Eli Júnior, Emerson Rafael, Érico Andrei, Eugenio Mazzini, Euripedes Borges,
Evandro Avellar, Everton Silva, Fabio Barros, Fábio Barros, Fabio Castro, Fábio Thomaz, Felipe Rodrigues, Fernanda Prado,
Fernando Rozas, Fernando Sousa, Flávio Meira, Flavkaze Flavkaze, Franklin Silva, Gabriel Barbosa, Gabriel Simonetto,
Geandreson Costa, Guilherme Felitti, Guilherme Gall, Guilherme Ostrock, Gustavo Dettenborn, Heitor Fernandes, Henrique
Junqueira, Igor Taconi, Ismael Ventura, Israel Gomes, Italo Silva, Jair Andrade, Jairo Lenfers, Janael Pinheiro, Jean Marcio,
João Lugão, Johnny Tardin, Jonatas Leon, Jônatas Silva, Jorge Plautz, Jose Mazolini, Juan Gutierrez, Juliana Machado,
Julio Silva, Kaio Peixoto, Kaneson Alves, Leandro Botassio, Leandro Miranda, Leonardo Cruz, Leonardo Mello, Leonardo
Nazareth, Lucas Adorno, Lucas Mello, Lucas Mendes, Lucas Oliveira, Lucas Polo, Lucas Praciano, Lucas Teixeira, Lucas
Valino, Luciano Silva, Luciano Teixeira, Luiz Junior, Luiz Lima, Luiz Paula, Maiquel Leonel, Marcelino Pinheiro, Marcelo Matte,
Márcio Martignoni, Marco Mello, Marcos Gomes, Marco Yamada, Maria Clara, Marina Passos, Mario Deus, Mateus Lisboa,
Matheus Silva, Matheus Vian, Mírian Batista, Murilo Andrade, Murilo Cunha, Murilo Viana, Natan Cervinski, Nicolas Teodosio,
Osvaldo Neto, Otávio Barradas, Patricia Minamizawa, Patrick Felipe, Paulo Braga, Paulo Tadei, Pedro Duarte, Pedro Henrique,
Pedro Pereira, Peterson Santos, Priscila Santos, Rafael Lopes, Rafael Rodrigues, Rafael Romão, Ramayana Menezes,
Reinaldo Silva, Renan Moura, Renato Veirich, Riverfount Riverfount, Robson Maciel, Rodrigo Brandao, Rodrigo Ferreira,
Rodrigo Freire, Rodrigo Junior, Rodrigo Vaccari, Rodrigo Vieira, Rogério Sousa, Ronaldo Silva, Rui Jr, Samanta Cicilia, Sara
Selis, Thiago Araujo, Thiago Borges, Thiago Bueno, Thiago Curvelo, Thiago Moraes, Thiago S, Tiago Minuzzi, Tony Dias,
Victor Wildner, Vinícius Bastos, Vinicius Figueiredo, Vítor Gomes, Vitor Luz, Vlademir Souza, Vladimir Lemos, Wellington
Abreu, Wesley Mendes, William Alves, Willian Lopes, Wilson Neto, Yury Barros
Obrigado você
A
Um pouco sobre o
pysimplegui Lib
O projeto
● PySimpleGUI
○ Python Simple Graphical User Interface
○ Interface Gráfica de Usuário Simples
● O projeto teve início 2018 (~4 anos)
● versão atual 4.60.0
● Mantido por @MikeTheWatchGuy
● GNU Lesser: Pode ser incorporada sem atribuição
A biblioteca
O PySimpleGUI não é um framework de janelas, como o TK, GTK, QT,
WxWindow ou Kivy.
É uma "família" de wrappers para as bibliotecas originais. Parecido com o
Toga, do projeto beeware (Live de Python #143)
Estrutura
O Projeto
PySimpleGUI PySimpleGUIQt PySimpleGUIWeb PySimpleGUIWx
Estrutura
O Projeto
PySimpleGUI PySimpleGUIQt PySimpleGUIWeb PySimpleGUIWx
Tkinter PySide2 Remi WxWindow
Estrutura
O Projeto
PySimpleGUI PySimpleGUIQt PySimpleGUIWeb PySimpleGUIWx
Tkinter PySide2 Remi WxWindow
Tk / TCL QT HTML / CSS / JS "Nativo"
Estrutura
O Projeto
PySimpleGUI PySimpleGUIQt PySimpleGUIWeb PySimpleGUIWx
Tkinter PySide2 Remi WxWindow
Tk / TCL QT HTML / CSS / JS "Nativo"
Sub projetos
PSGTray PSGBuilder
O Projeto
PySimpleGUI PySimpleGUIQt PySimpleGUIWeb PySimpleGUIWx
Sub projetos
PSGTray PSGBuilder
Faz o build para
Coloca a aplicação na
executável usando
bandeja de aplicativos
pyinstaller
O Projeto
PySimpleGUI PySimpleGUIQt PySimpleGUIWeb PySimpleGUIWx
pip install PySimpleGUI
Bora instalar
Window
Widgets
Layouts O core das
interfaces
O básico necessário
Título da Janela
Window
Janela
Ainda no básico
Widgets
Criando uma Janela
Criando uma Janela
Layouts
Para o PySImpleGUI, o layout é uma matriz de widgets.
Layouts
Widgets
A biblioteca de widgets disponíveis no PSG é composta por 34 widgets.
Sendo 27 componentes, e 5 widgets de estrutura e variações de
componentes.
Componentes básicos:
● Texto
● Input de texto
● Botão
● Menu
● Imagem
● Slider
● Barra de progresso
Widgets
A biblioteca de widgets disponíveis no PSG é composta por 34 widgets.
Sendo 27 componentes, e 5 widgets de estrutura e variações de
componentes.
Componentes básicos:
● Texto all_widgets.py
● Input de texto
● Botão
● Menu
● Imagem
● Slider
● Barra de progresso
Um Layout Básico
Image
Input
Button
Text
Aplicando o layout no código
Com código de verdade
pip install PySimpleGUIQt
pip install PySimpleGUIWx
pip install PySimpleGUIWeb *
Olhando as variações
Widgets de layout
● Column
● Seperator
○ Horizontal
○ Vertical
● Push
○ Horizontal
○ Vertical
● Sizer
Overview
Overview
Coluna Coluna
Overview
Push
Separador
PopUps
Resumindo
popups Window
Layout
Widgets
Componente Estrutura
Uma grande
variedade Temas
Observando a variedade de temas
Usando os temas
Event
os Fazendo as coisas
acontecerem
[Link]()
Os eventos são lidos pela janela usando o método .read(). E os estados de
todos os widgets são capturados todas às vezes.
[Link]()
Os eventos são lidos pela janela usando o método .read(). E os estados de
todos os widgets são capturados todas às vezes.
Loop de eventos
Loop de eventos
Identificadores de widgets
Todos os widgets tem um atributo `key` ele é passado por parâmetro na
instância do widget. Caso não seja usado, o PySImpleGUI vai definir um
valor numérico a ele. Por exemplo:
Identificadores de widgets
Todos os widgets tem um atributo `key` ele é passado por parâmetro na
instância do widget.
Identificadores de widgets
Um evento completo - Key do evento
Um evento completo - Valores dos widgets
Um evento completo - Update do widget
Play
Bora brincar um
pouco groud
Aten
ção! Hora de tirarmos
algumas conclusões
Problemas
● Documentação confusa
● 24 mil linhas de código em um único arquivo
○ Versão TK
● Os ports ainda não contam com todos os widgets implementados
● Não existem testes
● Não suporta programação assíncrona
● Bandit issues:
○ 5 vulnerabilidades críticas
■ Eval e Popen
○ 94 vulnerabilidades ao total
■ 68 try_except_pass
[Link]/dunossauro [Link]/livedepython [Link]@[Link]
Ajude o projeto <3