Skip to content

Home Администрирование Создание приложения PyGTK для просмотра файла журнала веб-сервера Apache
Создание приложения PyGTK для просмотра файла журнала веб-сервера Apache

Теперь, когда мы рассмотрели основы создания графического интерфейса в общем и с использованием PyGTK, перейдем к примеру, который с помощью PyGTK реализует нечто более полезное - рассмотрим создание приложения для просмотра содержимого файла журнала веб-сервера Apache. Это приложение будет обладать следующими функциональными возможностями:

• Позволит выбирать и открывать требуемый файл журнала

• Будет отображать номер строки, имя удаленного хоста, код состоя
ния и количество переданных байтов

• Позволит сортировать строки по их номерам, по именам удаленных
хостов, коду состояния или количеству переданных байтов

Этот пример основан на программном коде, выполняющем анализ файла журнала Apache. Исходный текст приложения приводится в примере 11.2.

Пример 11.2. Приложение PyGTK для просмотра файла журнала веб-сервера Apache

В примере приложения просмотра файла журнала веб-сервера Apache главный класс приложения называется ApacheLogViewer и наследует класс Object. В нашем главном объекте нет ничего особенного, он просто объединяет в себе все части графического интерфейса.

Далее в методе _ _init_ _() создается объект окна. В этом примере данная

операция отличается от аналогичной операции в предыдущем, «простом», примере тем, что здесь указаны размеры окна. Мы сначала указываем, что окно должно иметь размеры 640x480, а затем предписываем максимизировать его. Такая двойная установка размеров была вbinолнена преднамеренно. 640x480 - это довольно разумные начальные размеры, поэтому это очень неплохие значения по умолчанию. Хотя размеры 640x480 достаточно хороши, но чем окно больше, тем лучше, поэтому мы максимизируем окно. Оказывается, что первоначальная установка размеров 640x480 (или любых других размеров) считается хорошей практикой. Согласно документации к PyGTK менеджер окон может не поддерживать запрос maximize(). Кроме того, пользователю может понадобиться снова уменьшить размеры окна после его увеличения, поэтому есть смысл задать исходные размеры окна.

После создания окна и определения его размеров мы создаем элемент Vbox. Это область, или ящик, с «вертикальным размещением», представляющая собой контейнерный объект. В библиотеке GTK используется концепция использования областей с вертикальным (Vbox) и горизонтальным (НВох) размещением визуальных компонентов (виджетов) в окне. Основное предназначение этих областей состоит в том, чтобы вы могли «наполнять» их виджетами, помещая их в начало (сверху для Vbox и слева для НВох) или в конец области. Под термином «вид-жет» подразумеваются обычные элементы графического интерфейса, такие как кнопки или текстовые поля. При использовании этих областей вы можете расположить виджеты в окне практически любым требуемым вам способом. Поскольку области являются контейнерами, они могут вмещать другие области, поэтому вы спокойно можете вставлять одни области в другие.

После добавления области Vbox в окно мы добавляем панель инструментов и кнопки. Сама по себе панель инструментов - это еще одна разновидность контейнеров, и она предоставляет методы для добавления в нее компонентов. Далее мы создаем пиктограммы для кнопок, сами кнопки и подключаем к кнопкам обработчики событий. Наконец, мы добавляем кнопки на панель инструментов. Для добавления виджетов на панель инструментов Toolbar используется метод insert(), играющий ту же роль, что и метод pack_start() области Vbox.

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

После создания виджета выбора файлов мы создаем компонент списка, который будет содержать строки из файла журнала. Этот компонент состоит из двух частей: объект хранения данных (с именем List-Store) и визуальный компонент (TreeView), с которым пользователь будет взаимодействовать. Компонент хранения данных создается первым, путем определения типов данных для каждой колонки. Затем мы создаем визуальный компонент и связываем с ним компонент хранения данных.

Вслед за компонентом списка создается последний контейнер - прокручиваемая область окна, после чего все виджеты объединяются вместе. Мы помещаем в созданную ранее область Vbox панель инструментов, виджет выбора файлов и прокручиваемую область. Список, содержащий строки из файла журнала, мы добавляем в прокручиваемую область, благодаря чему при большом количестве строк мы сможем прокручивать их.

В заключение мы делаем одни виджеты видимыми, а другие - невидимыми. Главное окно делается видимым с помощью метода show_all(). Этот метод делает видимыми и все вложенные компоненты. Учитывая, что мы создаем приложение с графическим интерфейсом, нам необходимо, чтобы виджет выбора файлов оставался невидимым, пока пользователь не щелкнет на кнопке «open» (открыть). Поэтому этот виджет после его создания мы делаем невидимым.

Запустив это приложение, вы сможете убедиться, что оно соответствует нашим первоначальным требованиям. Мы можем выбирать и открывать нужный нам файл журнала. Каждому полю - номер строки, имя хоста, код состояния и количество переданных байтов - соответствует своя колонка в компоненте списка, поэтому мы легко можем идентифицировать данные, просто взглянув на строку. Кроме того, мы можем вbinолнять сортировку по любому столбцу, просто щелкнув на соответствующем заголовке.

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top