Bandeja do sistema Tkinter

Resumo : neste tutorial, você aprenderá como desenvolver um aplicativo Tkinter na bandeja do sistema.

Introdução aos aplicativos da bandeja do sistema Tkinter

Um aplicativo da bandeja do sistema é um tipo de aplicativo executado em segundo plano e fornece acesso rápido a algumas funções.

O aplicativo da bandeja do sistema normalmente aparece como um pequeno ícone na bandeja do sistema ou em áreas de notificação na barra de tarefas do ambiente Windows, macOS ou Linux Desktop.

Alguns exemplos comuns de aplicativos da bandeja do sistema são software antivírus, clientes de mensagens instantâneas ou software de monitoramento de sistema.

Os usuários podem interagir com o aplicativo da bandeja do sistema clicando nele para acessar um menu e realizar ações específicas.

O Tkinter não possui suporte integrado para o aplicativo da bandeja do sistema, mas você pode usar a PyStraybiblioteca de terceiros para criá-lo.

Exemplo de aplicação da bandeja do sistema Tkinter

A criação de um aplicativo na bandeja do sistema usando o Tkinter e PyStrayo pacote envolve as seguintes etapas:

Etapa 1. Instale as bibliotecas Pystray e Pillow

Instale as bibliotecas Pystray e Pillow usando o comando pip . O Pystray permite criar um aplicativo de bandeja e o Pillow ajuda a criar um ícone colocado na bandeja do sistema.

pip install pystray pillowLinguagem de código:  Python  ( python )

Etapa 2. Crie um aplicativo Tkinter na bandeja do sistema

Crie um script Python e use o seguinte código:

import tkinter as tk
import pystray
from PIL import Image


class MyApp(tk.Tk):
    def __init__(self):
        super().__init__()

        self.title("System Tray App")
        self.geometry('500x250')
        self.protocol('WM_DELETE_WINDOW', self.minimize_to_tray)
    
    def minimize_to_tray(self):
        self.withdraw()
        image = Image.open("app.ico")
        menu = (pystray.MenuItem('Quit',  self.quit_window), 
                pystray.MenuItem('Show',self.show_window))
        icon = pystray.Icon("name", image, "My App", menu)
        icon.run()

    def quit_window(self, icon):
        icon.stop()
        self.destroy()

    def show_window(self, icon):
        icon.stop()
        self.after(0,self.deiconify)

if __name__ == "__main__":
    app = MyApp()
    app.mainloop()Linguagem de código:  Python  ( python )

Saída:

Ícone da bandeja do sistema Tkinter

O app.icopode ser baixado aqui:

Como funciona.

Primeiro, importe as bibliotecas necessárias:

import tkinter as tk
import pystray
from PIL import ImageLinguagem de código:  Python  ( python )

Segundo, defina uma nova MyAppclasse que estenda a tk.Tkclasse. No construtor __init__(), vincule o evento close ao método minimize_to_tray():

self.protocol('WM_DELETE_WINDOW', self.minimize_to_tray)Linguagem de código:  Python  ( python )

Ao clicar no botão Fechar, o minimize_to_tray()método será executado criando um ícone na bandeja do sistema.

Terceiro, defina o minimize_to_tray()método que minimiza a janela principal na bandeja do sistema:

def minimize_to_tray(self):
    self.withdraw()
    image = Image.open("app.ico")
    menu = (pystray.MenuItem('Quit',  self.quit_window), 
            pystray.MenuItem('Show',self.show_window))
    icon = pystray.Icon("name", image, "My App", menu)
    icon.run()Linguagem de código:  Python  ( python )

No método:

Oculta self.withdraw()a janela principal sem destruí-la. Esta é a etapa necessária para minimizar a janela principal na bandeja do sistema:

def minimize_to_tray(self):
    # Hide the main window
    self.withdraw()Linguagem de código:  Python  ( python )

O seguinte chama o open()método da classe Image para carregar o app.icoque será usado como ícone da bandeja do sistema:

    # Open the image for the system tray icon
    image = Image.open("app.ico")Linguagem de código:  Python  ( python )

O seguinte define um menu para o ícone da bandeja do sistema, que contém dois PyStray MenuItemobjetos:

    menu = (pystray.MenuItem('Quit', self.quit_window), 
            pystray.MenuItem('Show', self.show_window))Linguagem de código:  Python  ( python )

Os itens de menu Quite Showestão associados aos métodos self.quit_windowe self.show_windowrespectivamente.

A linha a seguir cria um PyStrayícone com a imagem e o menu especificados:

    icon = pystray.Icon("name", image, "My App", menu)Linguagem de código:  Python  ( python )

O seguinte chama o run()método do Iconobjeto para tornar o ícone ativo na bandeja do sistema:

    icon.run()Linguagem de código:  Python  ( python )

A icon.runlinha () inicia o PyStrayloop de eventos, tornando o ícone ativo na bandeja do sistema. Agora ele responderá às interações do usuário, como cliques nos itens do menu.

Quarto, defina o item de menu quit_window()associado Quitna bandeja do sistema. Ao selecionar a Quitopção no menu de ícones da bandeja do sistema, ela interrompe o PyStrayloop de eventos ( icon.stop()) e destrói a janela principal, garantindo uma saída limpa do aplicativo ( self.destroy())

    def quit_window(self, icon):
        icon.stop()
        self.destroy()Linguagem de código:  Python  ( python )

Quinto, defina o show_window()método associado ao Showitem de menu no ícone da bandeja do sistema:

    def show_window(self, icon):
        icon.stop()
        self.after(0,self.deiconify)Linguagem de código:  Python  ( python )

Quando você seleciona a opção Mostrar no menu do ícone da bandeja do sistema, ele fecha o ícone da bandeja do sistema (interrompe o PyStrayloop de eventos) e usa o after()método para agendar o deiconify()método a ser chamado imediatamente, resultando na restauração do aplicativo principal e tornando-se visível novamente.

Resumo

  • Use a PyStraybiblioteca para criar um aplicativo Tkinter na bandeja do sistema.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *