Меню значка wxpython systray - PullRequest
       7

Меню значка wxpython systray

1 голос
/ 06 января 2010

Я разрабатываю приложение, которое хочу запустить в фоновом режиме. Взаимодействие с пользователем не требуется, поэтому я хочу, чтобы приложение работало незаметно, за исключением значка в системном окне. Я хочу, чтобы этот значок имел меню, которое просто открывает файлы конфигурации / справки в блокноте. Может ли кто-нибудь указать мне правильное направление или привести пример?

Ответы [ 3 ]

5 голосов
/ 19 января 2010

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

TaskBarIcon.py

import wx


ID_SHOW_OPTION = wx.NewId()
ID_EDIT_OPTION = wx.NewId()


class Icon(wx.TaskBarIcon):

    def __init__(self, parent, icon, tooltip):
        wx.TaskBarIcon.__init__(self)
        self.SetIcon(icon, tooltip)
        self.parent = parent
        self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnLeftDClick)
        self.CreateMenu()

    def CreateMenu(self):
        self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.OnPopup)
        self.menu = wx.Menu()
        self.menu.Append(ID_SHOW_OPTION, '&Show Option 1')
        self.menu.Append(ID_EDIT_OPTION, '&Edit Option 2')
        self.menu.AppendSeparator()
        self.menu.Append(wx.ID_EXIT, 'E&xit')

    def OnPopup(self, event):
        self.PopupMenu(self.menu)

    def OnLeftDClick(self, event):
        if self.parent.IsIconized():
            self.parent.Iconize(False)
        if not self.parent.IsShown():
            self.parent.Show(True)
        self.parent.Raise()

В пределах init () вашего фрейма добавьте две строки ниже:

self.TrayIcon  = tbi.Icon(self, wx.Icon("C:\\YourIcon.png", wx.BITMAP_TYPE_PNG), "ToolTip Help Text Here")
self.Bind(wx.EVT_ICONIZE, self.OnIconify)

А теперь просто добавьте эту функцию в ваш кадр, и вы должны установить:

def OnIconify(self, event):
    self.Hide()

Просто не забудьте отредактировать элементы в классе Icon в соответствии с вашими потребностями.

3 голосов
/ 06 января 2010

Рассматривали ли вы запуск этого приложения в качестве службы Windows? Многие пользователи будут считать значок в системном трее практически бездействующим. Вы все еще можете предоставить ссылки на файлы справки / конфигурации в качестве пункта меню «Пуск».

Пакет расширений win32 для python должен иметь поддержку служб python.

Конечно, есть еще причины, по которым вы можете захотеть запустить его как иконку в системном трее. Мне жаль, что у меня нет никакого опыта с этим.

2 голосов
/ 06 января 2010

Вы хотите wx.TaskBarIcon:

http://docs.wxwidgets.org/stable/wx_wxtaskbaricon.html

В демоверсии wxPython есть пример кода, который вы можете посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...