Автор оригинала: Mike Driscoll.
Я делаю 3 частию серии на использование WXPYPHON и PYWIN32 для захвата выхода с запущенного сеанса OpenVPN.
Я использую OpenVPN для подключения к ПК на работе. Я заметил, что наш текущий метод запуска OpenVPN был в консольном окне, чтобы можно было следить за выходом программы. Если пользователь произошел, чтобы закрыть указанное окно, оно закончится сеанс VPN. Я думал, что это было глупо, поэтому я решил, что попробую обернуть интерфейс, используя WxPython таким образом, что я могу минимизировать его на системный лоток и довести его обратно по требованию, чтобы проверить вывод, если у меня проблемы. Если вы хотите следить, то вам нужно следующее:
Получил все те? ОК. Давай продолжим. Для начала создайте папку, чтобы держать скрипты. На самом деле нам нужна пара, чтобы сделать это правильно.
Во-первых, мы собираемся создать значок системного лотка.
Шаг 1: Выберите значок (я использовал один из набора тамарина)
Шаг 2: После того, как у вас есть значок, мы будем использовать утилиту WXPYPHON, называемую IMG2PY, которая преобразует значок или изображение в файл Python. Он можно найти в вашей папке Python после установки WxPython: \\ Путь \ to \ python25 \ lib \ site-packages \ wx-2.8-MSW-Unicode \ WX \ Tools (отрегулируйте по мере необходимости для вашей системы)
Шаг 3: Переместите файл значка в каталог на шаге 2 и откройте окно команд, нажав кнопку «Пуск», «Запустить» и «Введите CMD». Перейдите к каталогу выше (используя команду CD) и выполните следующее: python img2py.py -i myicon.ico icon.py.
Шаг 4: Как только это сделано, скопируйте файл icon.py в папку, которую вы создали, чтобы удерживать сценарии. Это будет сопряжено с некоторым кодом, который обрабатывает значок и щелкните правой кнопкой мыши меню.
Теперь мы создадим логику, необходимую для значка системного лотка, чтобы ответить на события мыши. Я нашел какой-нибудь код в демонстрации WXPYPHON, который сделал большую часть того, что я сделал. Поэтому я скопировал его и немного изменил его, чтобы соответствовать моим потребностям. Вы можете увидеть конец результата ниже:
import wx from vpnIcon import getIcon class VPNIconCtrl(wx.TaskBarIcon): TBMENU_RESTORE = wx.NewId() TBMENU_CLOSE = wx.NewId() TBMENU_CHANGE = wx.NewId() def __init__(self, frame): wx.TaskBarIcon.__init__(self) self.frame = frame # Set the image tbIcon = getIcon() # Give the icon a tooltip self.SetIcon(tbIcon, "VPN Status") self.imgidx = 1 # bind some events self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnTaskBarActivate) self.Bind(wx.EVT_MENU, self.OnTaskBarActivate, id=self.TBMENU_RESTORE) self.Bind(wx.EVT_MENU, self.OnTaskBarClose, id=self.TBMENU_CLOSE) def CreatePopupMenu(self): """ This method is called by the base class when it needs to popup the menu for the default EVT_RIGHT_DOWN event. Just create the menu how you want it and return it from this function, the base class takes care of the rest. """ menu = wx.Menu() menu.Append(self.TBMENU_RESTORE, "View Status") menu.AppendSeparator() menu.Append(self.TBMENU_CLOSE, "Close Program") return menu def OnTaskBarActivate(self, evt): if self.frame.IsIconized(): self.frame.Iconize(False) if not self.frame.IsShown(): self.frame.Show(True) self.frame.Raise() def OnTaskBarClose(self, evt): self.Destroy() self.frame.Close()
В следующий раз мы перейдем к коду Win32, вам понадобится узнать, и в финальной части мы создадим графический интерфейс и поставим остальные части вместе.