Função para Abrir uma Interface do tkinter no Centro da Tela em Python

Publicado por Mauricio Ferrari em 07/10/2021

[ Hits: 10.074 ]

Blog: https://www.youtube.com/@LinuxDicasPro

 


Função para Abrir uma Interface do tkinter no Centro da Tela em Python



Uma das formas de usar interface gráfica em Python é com o uso do tkinter. Usei essa opção por ser algo nativo do Python. Assim, eu tenho uma aplicação que não dependa de dependências como gtk ou qt5. É claro que não é uma interface tão completa como o gtk e o qt5, mas possui diversas opções para criar sua interface.

Porém, eu queria que a minha interface em tkinter fosse inicializada no centro da tela e o tkinter não tinha opção para isso. Mas, com uma boa pesquisa, consegui enfim uma boa solução. Então, eu passei a usar essa função:

def center(win):
    # :param win: the main window or Toplevel window to center

    # Apparently a common hack to get the window size. Temporarily hide the
    # window to avoid update_idletasks() drawing the window in the wrong
    # position.
    win.update_idletasks()  # Update "requested size" from geometry manager

    # define window dimensions width and height
    width = win.winfo_width()
    frm_width = win.winfo_rootx() - win.winfo_x()
    win_width = width + 2 * frm_width

    height = win.winfo_height()
    titlebar_height = win.winfo_rooty() - win.winfo_y()
    win_height = height + titlebar_height + frm_width

    # Get the window position from the top dynamically as well as position from left or right as follows
    x = win.winfo_screenwidth() // 2 - win_width // 2
    y = win.winfo_screenheight() // 2 - win_height // 2

    # this is the line that will center your window
    win.geometry('{}x{}+{}+{}'.format(width, height, x, y))

    # This seems to draw the window frame immediately, so only call deiconify()
    # after setting correct window position
    win.deiconify()

Não vou entrar em detalhes quanto ao seu funcionamento, até porque eu acredito que esteja bem comentado. Porém, existem alguns detalhes a ser considerado. Durante os meus testes, percebi que essa função não funciona bem se usada antes da definição da resolução. Também tem um atributo que pode ser usado por questão de mais estética, porém opcional.

Para exemplificação, vou apresentar esse simples código:

import tkinter as tk

main_app = tk.Tk()
main_app.attributes('-alpha', 0.0) # Opcional, para deixar a janela totalmente transparente até os ajustes serem feitos.
main_app.minsize(500, 300)
center(main_app) # A função

main_app.attributes('-alpha', 1.0) # A interface fica visível novamente.
main_app.mainloop()

Isso aqui, só vai mostrar a interface vazia sem nada, mas já da ter uma noção de como ele deve ser usado e ao rodar o código, já vai centralizar a janela.

Espero que seja útil. Até a próxima.

Fonte: python - How to center a window on the screen in Tkinter? - Stack Overflow

Outras dicas deste autor

Fortune em português no Slackware Current

gcc: fatal error: cannot execute 'cc1plus': execvp: [...] - Como resolver no Linux Mint 20

Sed - Adicionar uma Linha em Branco no Final do Arquivo

Importar chave pública GPG

Expandindo o Til pelo Diretório Inicial do Usuário em Python

Leitura recomendada

Novo TradutorOOoNote substitui texto e envia o antigo para anotação

Como descobrir seu chat_id no Telegram

Executando um Programa Externo sem Impedir o Funcionamento do Programa em Python

Obtendo mirrors mais velozes no Arch Linux

Instalando o pyenv no Linux Mint e Ubuntu

  

Comentários
[1] Comentário enviado por inforsol10 em 12/06/2024 - 12:19h


Valeu Mauricio pela dica!!!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts