Улучшаем “Привет, Мир!”

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# example helloworld2.py

import pygtk
pygtk.require('2.0')
import gtk

class HelloWorld2:

    # Наш новый улучшенный callback. Данные передаваемые
    # этому методу выводятся в stdout.
    def callback(self, widget, data):
        print "Была нажата %s..." % data

    # другой callback
    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False

    def __init__(self):
        # Создаём новое окно
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        # Это новый вызов, который просто устанавливает в заголовок нашего
        # нового окна "Hello Buttons!"
        self.window.set_title("Привет, кнопки!")

        # Здесь мы просто устанавливает обработчик для delete_event который немедленно
        # завершает GTK.
        self.window.connect("delete_event", self.delete_event)

        # Устанавливает ширину границы для окна.
        self.window.set_border_width(10)

        # Мы создаём коробку для компоновки виджетов. Подробнее это будет объяснено
        # в разделе "компоновка". Коробка для пользователя не видна, она
        # просто используется как средство для расположения виджетов.
        self.box1 = gtk.HBox(False, 0)

        # Разместим коробку в главном окне.
        self.window.add(self.box1)

        # Создаём новую кнопку с надписью "Button 1".
        self.button1 = gtk.Button("Кнопка 1")

        # Теперь, когда кнопка нажата мы вызываем callback метод
        # с указателем на "button 1" как аргумент.
        self.button1.connect("clicked", self.callback, "кнопка 1")

        #  Взамен of add(), мы укладываем кнопку в невидимую коробку,
        # которая размещена в окне.
        self.box1.pack_start(self.button1, True, True, 0)

        # Не забывайте об этом шаге, он говорит GTK о том что
        # мы подготовили кнопку, и теперь она может быть отображена.
        self.button1.show()

        # Повторяем те-же шаги для второй кнопки.
        self.button2 = gtk.Button("Кнопка 2")

        # Вызываем похожий callback метод с другим аргументом,
        # в этот раз передаём указатель на "button 2".
        self.button2.connect("clicked", self.callback, "кнопка 2")

        self.box1.pack_start(self.button2, True, True, 0)

        # Порядок в котором мы показываем кнопки не очень важен, но мы
        # рекомендуем показывать окно последним, чтобы его отрисовка была выполнена один раз.
        self.button2.show()
        self.box1.show()
        self.window.show()

def main():
    gtk.main()

if __name__ == "__main__":
    hello = HelloWorld2()
    main()

Запущенная программа helloworld2.py создаёт окно, показанное на Рисунке 3.1, “Улучшенный пример ‘Привет, Мир!’”.

Рисунок 3.1. Улучшенный пример “Привет, Мир!”

Upgraded Hello World Example

Вы вероятно заметили, что сейчас нет лёгкого пути для завершения работы программы, вы должны использовать свой оконный менеджер или командную строку для её закрытия. Хорошим упражнением для читателя будет вставка третьей кнопки “Выход”, которая будет завершать работу программы. Вы также можете поиграться с опциями к pack_start() пока будете читать следующий раздел. Попробуйте изменять размер окна, и наблюдайте за реакцией.

Отличие этого кода от первого helloworld по порядку.

Как написано выше – здесь нет обработчика события “destroy”.

Строки 13-14 определяют callback метод похожий на метод hello() в первом helloworld. Отличие заключается в том, что новый метод выводит сообщение содержащее переданные ему данные.

Строка 27 устанавливает строку заголовка для окна (смотрите Рисунок 3.1, “Улучшенный пример ‘Привет, Мир!’”).

Строка 39 создаёт горизонтальную коробку (gtk.HBox) для размещения двух кнопок, создаваемых в строках 45 и 60. Строка 42 добавляет горизонтальную коробку в контейнер окна.

Строки 49 и 64 подключают метод callback() для сигнала “clicked” от кнопок. Каждая кнопка передаёт методу callback() свою строку.

Строки 53 и 66 размещают кнопки в горизонтальную коробку. Строки 57 и 70 просят GTK отобразить кнопки.

Строки 71-72 просят GTK отобразить коробку и окно в соответственном порядке.


Предыдущая страница На уровень выше  Следующая страница
Глава 3. Двигаемся дальше К оглавлению  Глава 4. Компоновка виджетов (gtk.HBox, gtk.VBox)

 

 

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>