Flet, Layout: Page
O objeto page é o primeiro conteiner na construção da árvore de controles do Flet, sendo o único que não está ligado a um conteiner pai. Ele contém o objeto View que, por sua vez abriga todos os outros controles. Uma instância de page e uma view primária são criadas automaticamente quando uma sessão é iniciada.
Propriedades, métodos e eventos de page
Propriedades | Métodos | Eventos |
auto_scroll, appbar, banner, bgcolor, client_ip, client_user_agent, controls, dark_theme, dialog, floating_action_button, fonts, height, horizontal_alignment, on_scroll_interval, overlay, padding, platform, pubsub, pwa, route, rtl, scroll, session_id, spacing, splash, show_semantics_debugger, theme, theme_mode, title, vertical_alignment, views, web, width, window_always_on_top, window_bgcolor, window_focused, window_frameless, window_full_screen, window_height, window_left, window_maximizable, window_maximized, window_max_height, window_max_width, window_minimizable, window_minimized, window_min_height, window_min_width, window_movable, window_opacity, window_resizable, window_title_bar_hidden, window_title_bar_buttons_hidden, window_top, window_prevent_close, window_progress_bar, window_skip_task_bar, window_visible, window_width |
can_launch_url(url), close_banner(), close_bottom_sheet(), close_dialog(), close_in_app_web_view(), get_clipboard(), go(route), launch_url(url), page.get_upload_url(file_name, expires), scroll_to(offset, delta, key, duration, curve), set_clipboard(data), show_banner(banner: Banner), show_bottom_sheet(bottom_sheet: BottomSheet), show_dialog(dialog: AlertDialog), show_snack_bar(snack_bar: SnackBar), window_center(), window_close(), window_destroy(), window_to_front() |
on_close, on_connect, on_disconnect, on_error, on_keyboard_event, on_resize, on_route_change, on_scroll, on_view_pop, on_window_event |
Vamos primeiro fazer uma descrição dessas propriedades, métodos e eventos, e depois mostrar exemplos de uso. Muitas vezes a mera descrição do elemento é suficiente para que as apliquemos no código. Em alguns casos notas adicionais estão linkadas.
Propriedades de page
Observação: Os itens marcados com o ícone tem disponibilidade restrita:
|
|
Propriedade | Descrição |
auto_scroll | True se a barra de scroll deve ser automaticamente posicionada no final se seu filho é atualizado. Necessariamente auto_scroll = False para que o método scroll_to() funcione. |
appbar | page.appbar recebe uma barra de controle do aplicativo no alto da page (diferente da barra da janela). |
banner | Controle Banner no alto da página. |
bgcolor | Cor de fundo da página. |
client_ip | 🌎 Endereço de IP do usuário conectado. |
client_user_agent | 🌎 Detalhes do navegador do usuário conectado. |
controls | Lista de controles a exibir na página. Novos controles pode ser adicionados com o método usual de lista, controls.append(ctrl)) . Para remover o último controle inserido na página usamos controls.pop() .
# Exemplos: page.controls.append(ft.Text("Olá!")) page.update() # alternativamente page.add(ft.Text("Olá!")) # page.add é um shortcut para page.controls.append() seguido de page.update() # para remover (pop) o último controle da lista page.controls.pop() page.update() |
dark_theme | Indica a instância do tema usado. |
dialog | Um controle AlertDialog para ser exibido. |
floating_action_button | Um controle FloatingActionButton para exibir no alto da página. |
fonts | Importa fontes para uso em Text.font_family ou aplica fonte no aplicativo inteiro com theme.font_family. Flet admite o uso de fontes .ttc, .ttf, .otf. Exemplos: page.fonts Recebe um dicionário {"nome_da_fonte" : "url_da_fonte"} . Essas fonts podem ser usadas com text.font_family ou theme.font_family, para aplicar a fonte em todo o aplicativo. Podem ser usadas fontes .ttc, .ttf, .otf .
Para um recurso externo a “url_da_fonte” é a URL absoluta, e para fontes instaladas a URL relativa para um diretório assets_dir. Esse diretório deve ser especificado na chamada para flet.app(), podendo ser um caminho relativo ao local onde está main.py ou um caminho absoluto. Por exemplo, suponha a estrutura mostrada na figura 1: Para usar a fonte “Open Sans” e “Kanit”, importada do GitHub, como default, podemos fazer: import flet as ft def main(page: ft.Page): page.fonts = { "Kanit": "https://raw.githubusercontent.com/google/fonts/master/ofl/kanit/Kanit-Bold.ttf", "Open Sans": "/fonts/OpenSans-Regular.ttf" } page.theme = Theme(font_family="Kanit") page.add( ft.Text("Esse texto usa a fonte default Kanit"), ft.Text("Esse texto usa a fonte Open Sans", font_family="Open Sans") ) ft.app(target=main, assets_dir="assets") |
height | 🅾 Altura da página, geralmente usada junto com o evento page.on_resize . |
horizontal_alignment | Alinhamento horizontal do controle filho em relação a seu conteiner. Determina como os controles serão posicionados na horizontal. Default é horizontal_alignment=CrossAxisAlignment.START , que coloca os controles à esquerda de page. CrossAxisAlignment é um ENUM com os valores: START (default), CENTER, END, STRETCH e BASELINE. |
on_scroll_interval | Passos em milisegundo para o evento on_scroll event. Default é 10. |
overlay | Lista de controles exibidos em pilha sobre o conteúdo da página. |
padding | Espaço entre as bordas do controle e as do conteiner. Default é page.padding = 10 . |
platform | Sistema operacional onde o aplicativo está sendo executado. Pode ser: ios, android, macos, linux ou, windows. |
pubsub | Implementação para transferência de mensagens entre sessões do aplicativo. |
subscribe(handler) | Registra a sessão atual para emissão de mensagens. handler é uma função ou método contendo uma mensagem. |
subscribe_topic(topic, handler) | Inscreve a sessão para recebimento de mensagens sobre tópico específico. |
send_all(message) | Envia mensagem a todos os inscritos. |
send_all_on_topic(topic, message) | Envia mensagem para todos os inscritos em um tópico específico. |
send_others(message) | Envia mensagem para todos, exceto para quem envia. |
send_others_on_topic(topic, message) | Envia mensagem para todos em um tópico específico, exceto para quem envia. |
unsubscribe() | Remove inscrição da sessão atual de todas as mensagens enviadas. |
unsubscribe_topic(topic) | Remove inscrição da sessão de todas as mensagens sobre o tópico. |
unsubscribe_all() | Remove as inscrições da sessão de todas as mensagens. |
Notas sobre subscribe, unsubscribe e send. | subscribe(handler) inscreve a sessão ativa do aplicativo para recebimento de mensagens. Se topic não for especificado todos os tópicos são enviados. handler é um método com um argumento que é a mensagem.subscribe_topic(topic, handler) especifica o tópico que será enviado.
@dataclass class Message: user: str text: str def main(page: ft.Page): def on_broadcast_message(message): page.add(ft.Text(f"{message.user}: {message.text}")) page.pubsub.subscribe(on_broadcast_message) def on_send_click(e): page.pubsub.send_all(Message("John", "Hello, all!")) page.add(ft.ElevatedButton(text="Send message", on_click=on_send_click))
@dataclass class Message: user: str text: str def main(page: ft.Page): def on_leave_click(e): page.pubsub.unsubscribe() page.add(ft.ElevatedButton(text="Leave chat", on_click=on_leave_click)) Para remover a sessão da lista de destinatários de mensagens de um tópico use def main(page: ft.Page): def client_exited(e): page.pubsub.unsubscribe_all() page.on_close = client_exited |
pwa | 🅾 pwa=True se o aplicativo está rodando como um Progressive Web App (PWA). |
route | Define ou lê a rota de navegação da página |
rtl | rtl=True para definir direção de texto da direita para esquerda. Default: False. |
scroll | Habilita a página para rolagem (scroll), mostrando ou ocultando a barra de rolagem. scroll=ScrollMode.None é o default. ScrollMode é um ENUM com os valores:
|
session_id | 🅾 ID único da sessão do usuário. |
spacing | Espaço vertical entre controles na página. Default: 10 pixeis. Só é aplicado quando o alignment=start, end ou center . |
splash | Um controle que é exibido sobre o conteúdo da página. Operações lentas podem ser indicadas por meio de um ProgressBar ou ProgressRing.
É exibido em cima da página de conteúdo. Pode ser usado junto com ProgressBar ou ProgressRing para indicar uma operação demorada. from time import sleep import flet as ft def main(page: ft.Page): def button_click(e): page.splash = ft.ProgressBar() btn.disabled = True page.update() sleep(3) page.splash = None btn.disabled = False page.update() btn = ft.ElevatedButton("Do some lengthy task!", on_click=button_click) page.add(btn) ft.app(target=main) |
show_semantics_debugger | True para a exibição de informações emitidas pelo framework. |
theme | Essa propriedade recebe uma instância de theme.Theme para personalizar o tema. No estágio atual de desenvolvimento do Flet um theme só pode ser gerado a partir de uma cor “semente” (“seed”). Por exemplo, para um tema claro sobre tom verde:
page.theme = theme.Theme(color_scheme_seed="green") page.update() A classe Theme tem as propriedades:
† Transições de navegação: (theme.page_transitions personaliza transições entre páginas para diversas plataformas. Seu valor é uma instância de PageTransitionsTheme com as propriedades adicionais:
Transições suportadas estão em um ENUM ft.PageTransitionTheme: NONE (transição imediata e sem animação), FADE_UPWARDS, OPEN_UPWARDS, ZOOM, CUPERTINO. São exemplos: theme = ft.Theme() theme.page_transitions.android = ft.PageTransitionTheme.OPEN_UPWARDS theme.page_transitions.ios = ft.PageTransitionTheme.CUPERTINO theme.page_transitions.macos = ft.PageTransitionTheme.FADE_UPWARDS theme.page_transitions.linux = ft.PageTransitionTheme.ZOOM theme.page_transitions.windows = ft.PageTransitionTheme.NONE page.theme = theme page.update() |
ColorScheme class | Um conjunto de 30 cores para configuração de cores dos componentes. |
TextTheme class | Personalização de estilo de textos. |
ScrollbarTheme class | Personalização de cor, espessura, forma da barra de scroll. |
TabsTheme class | Personalização da aparência de controles de TAB. |
Navigation transitions | Personalização das transições entre páginas de navegação. |
theme_mode | Tema da página: SYSTEM (default), LIGHT ou DARK |
title | Título da página ou do navegador. |
vertical_alignment | Alinhamento vertical dos controles filhos. Admite o ENUM MainAxisAlignment com os seguintes valores:
Por exemplo |
views | Uma lista de controles View para armazenar histórico de navegação. A última View é a página atual, a primeira é “root”, que não pode ser excluída. |
web | True se a aplicativo está rodando no navegador. |
width | 🅾 Largura da página web ou janela de aplicativo, usualmente usada com o evento page.on_resize. |
window_always_on_top | 🖥️ Ajusta de a janela deve estar sempre acima das demais janelas. Default: False. |
window_bgcolor | 🖥️ Cor de fundo da janela do aplicativo. Pode ser usado com page.bgcolor para tornar a janela toda transparente.
Se usada com uma página transparente toda a janela fica transparente: |
window_focused | 🖥️ True para trazer o foco para essa janela. |
window_frameless | 🖥️ True para eliminar as bordas das janelas. |
window_full_screen | 🖥️ True para usar tela cheia. Default: False. |
window_height | 🖥️ Leitura ou ajuste da altura da janela. |
window_left | 🖥️ Leitura ou ajuste da posição horizontal da janela, em relação à borda esquerda da tela. |
window_maximizable | 🖥️ False para ocultar botões de “Maximizar”. Default: True. |
window_maximized | 🖥️ True se a janela do aplicativo está maximizada. Pode ser ajustada programaticamente. |
window_max_height | 🖥️ Leitura ou ajuste da altura máxima da janela do aplicativo. |
window_max_width | 🖥️ Leitura ou ajuste da largura máxima da janela do aplicativo. |
window_minimizable | 🖥️ Se False o botão de “Minimizar” fica oculto. Default: True. |
window_minimized | 🖥️ True se a janela está minimizada. Pode ser ajustada programaticamente. |
window_min_height | 🖥️ Leitura ou ajuste da altura mínima da janela do aplicativo. |
window_min_width | 🖥️ Leitura ou ajuste da largura mínima da janela do aplicativo. |
window_movable | 🖥️ macOS apenas. Se False impede a movimentação da janela. Default: True. |
window_opacity | 🖥️ Ajuste da opacidade da janela. 0.0 (transparente) and 1.0 (opaca). |
window_resizable | 🖥️ Marque como False para impedir redimensionamento da janela. Default: True. |
window_title_bar_hidden | 🖥️ True para ocultar a barra de título da janela. O controle WindowDragArea permite a movimentação de janelas de barra de título. |
window_title_bar_buttons_hidden | 🖥️ apenas macOS. True para ocultar butões de ação da janela quando a barra de título está invisível. |
window_top | 🖥️ Leitura ou ajuste da posição da distância da janela (em pixeis) ao alto da tela. |
window_prevent_close | 🖥️ True para interceptar o sinal nativo de fechamente de janela. Pode ser usado com page.on_window_event ou page.window_destroy() para forçar uma confirmação do usuário. |
window_progress_bar | 🖥️ Exibe uma barra de progresso com valor de 0.0 a 1.0 na barra de tarefas (Windows) ou Dock (macOS). |
window_skip_task_bar | 🖥️ True para ocultar a barra de tarefas (Windows) ou Dock (macOS). |
window_visible | 🖥️ True para tornar o aplicativo visível, se o app foi iniciado em janela oculta.window_visible=True torna a janela visível. Se o aplicativo é iniciado com view=ft.AppView.FLET_APP_HIDDEN a janela é criada invisível. Para torná-la visível usamos page.window_visible = True . |
window_width | 🖥️ Leitura ou ajuste da largura da janela do aplicativo. |
Bibiografia
- Python com Flet: Bibiografia Geral
- Flet Controls Galery: Galeria de Controles: Buttons
- Galeria de ícones: Icons Browser
- GitHub: Controls Galery: Galeria de Controles: Código
Excelente documentação em português Gilherme Silva, uma pena que não tem a opção de deixar este site no modo dark ou permitir que o navegador converta em modo leitura, pois em uma leitura extensa com esse fundo branco, estora os olhos.
Nilton, eu uso o Firefox, no Linux, e consigo converter qualquer página do site para o modo leitura.
Vou ver o que posso fazer a respeito do modo dark.