Рубрики
Без рубрики

WXPYPHON: Как минимизировать системный лоток

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Я вижу, как люди время прошу о этой теме время от времени в разных местах в Интернете. Создание WxPython минимизировать на лоток действительно довольно просто, но есть хотя бы одна вещь, на которую нужно осмотреть. Мы доберемся до этого, но сначала нам нужно провести некоторое время, глядя на какой-нибудь код. На самом деле я написал о Tasksbaricons пару лет назад. Сначала мы посмотрим на код значка задач, который свободно на основе вышеупомянутой статьи:

import wx

########################################################################
class CustomTaskBarIcon(wx.TaskBarIcon):
    """"""
    
    #----------------------------------------------------------------------
    def __init__(self, frame):
        """Constructor"""
        wx.TaskBarIcon.__init__(self)
        self.frame = frame
        
        img = wx.Image("24x24.png", wx.BITMAP_TYPE_ANY)
        bmp = wx.BitmapFromImage(img)
        self.icon = wx.EmptyIcon()
        self.icon.CopyFromBitmap(bmp)
        
        self.SetIcon(self.icon, "Restore")
        self.Bind(wx.EVT_TASKBAR_LEFT_DOWN, self.OnTaskBarLeftClick)
 
    #----------------------------------------------------------------------
    def OnTaskBarActivate(self, evt):
        """"""
        pass
 
    #----------------------------------------------------------------------
    def OnTaskBarClose(self, evt):
        """
        Destroy the taskbar icon and frame from the taskbar icon itself
        """
        self.frame.Close()
 
    #----------------------------------------------------------------------
    def OnTaskBarLeftClick(self, evt):
        """
        Create the right-click menu
        """
        self.frame.Show()
        self.frame.Restore()

Как видите, нам нужно подкласс wx.taskbaricon, а затем придать ему значок. Для этой статьи мы будем использовать бесплатный значок от deviantart Отказ Хорошо, поэтому в init, мы должны прыгать через пару обручей, чтобы превратить файл PNG в формат, который можно использовать методами значка WX. Остальные методы требуются, когда подкладка WX.TaskBaricon. Вы заметите, что мы связываемся с evt_taskbar_left_down, чтобы, когда пользователь нажимает значок, мы можем восстановить окно.

Теперь мы готовы взглянуть на код кадра.

import custTray
import wx

########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Minimize to Tray")
        panel = wx.Panel(self)
        self.tbIcon = custTray.CustomTaskBarIcon(self)
        
        self.Bind(wx.EVT_ICONIZE, self.onMinimize)
        self.Bind(wx.EVT_CLOSE, self.onClose)
        
        self.Show()
        
    #----------------------------------------------------------------------
    def onClose(self, evt):
        """
        Destroy the taskbar icon and the frame
        """
        self.tbIcon.RemoveIcon()
        self.tbIcon.Destroy()
        self.Destroy()
        
    #----------------------------------------------------------------------
    def onMinimize(self, event):
        """
        When minimizing, hide the frame so it "minimizes to tray"
        """
        if self.IsIconized():
            self.Hide()
        
#----------------------------------------------------------------------
def main():
    """"""
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()
    
if __name__ == "__main__":
    main()

Здесь у нас есть два привязки событий. Один для evt_close, а другой для evt_iconize. Последние пожали, когда пользователь минимизирует кадр, поэтому мы используем это, чтобы минимизировать на лоток, который действительно просто скрывает рамку. Другие события стреляют, когда вы закрываете рамку, и это немного важнее. Почему? Ну, вам нужно поймать тесное событие в случае, если пользователь пытается закрыть приложение через значок лотка. И вам нужно убедиться, что вы удалите значок и уничтожайте его или приложение, появятся, но на самом деле просто зависают на заднем плане.

Обертывание

Теперь вы знаете, как минимизировать ваше приложение WXPYPHON на область системного лотка. Я использовал это для простой программы проверки электронной почты до. Вы можете использовать его для многих других вещей, таких как монитор, который отвечает на события, поднимая рамку к известности.

Дополнительное чтение