Контейнеры

10.1. Коробка событий (gtk.EventBox)

Некоторые виджеты GTK не связаны с X Window, так как они просто рисуются на своих родителях. Поскольку они не могут принимать события, и если имеют неправильный размер, то не могут его изменить, и вы, в таком случае, можете получить неприятный вид приложения и т.д. Если вам нужно большего от таких виджетов, то следует использовать EventBox.

Сначала виджет EventBox может вам показаться полностью бесполезным. Он ничего не отображает на экране, и не отвечает ни на одно событие. Конечно, у него есть своя функция – он предоставляет X Window соединения для находящихся в нём виджетов. Это важно, так как достаточно много виджетов GTK не связаны с X Window. Отсутствие связки с X Window экономит память и ускоряет производительность, но имеет свои побочные эффекты. Так, виджет без X Window не может принимать события, не может изменять размер и не может выбирать цвет фона. Хотя название EventBox намекает на обработчики событий, но виджет также может применяться для изменения размера (и не только, смотрите пример).

Для создания нового виджета EventBox используется:

  event_box = gtk.EventBox()

Какой-либо виджет может быть помещён в этот event_box::

  event_box.add(widget)

Пример eventbox.py показывает два метода использования EventBox – метка обрезается (это тоже изменение размера, только для длины отображаемого текста метки) в маленьком прямоугольнике, имеет зелёный фон, и настроена так что клик по ней закрывает программу. Изменение размеров окна предопределяет различную длину метки. Рисунок 10.1, “Пример Event Box” показывает внешний вид окна:

Рисунок 10.1. Пример Event Box

Event Box Example

Исходный код для eventbox.py:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# example eventbox.py
 
import pygtk
pygtk.require('2.0')
import gtk
 
class EventBoxExample:
    def __init__(self):
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_title("Event Box")
        window.connect("destroy", lambda w: gtk.main_quit())
        window.set_border_width(10)
 
        # Создаём EventBox для нашего окна
        event_box = gtk.EventBox()
        window.add(event_box)
        event_box.show()
 
        # Создаём длинную метку
        label = gtk.Label("Кликните здесь, чтобы выйти, выйти, выйти...")
        event_box.add(label)
        label.show()
 
        # Обрезаем её.
        label.set_size_request(110, 20)
 
        # И привязываем к ней событие
        event_box.set_events(gtk.gdk.BUTTON_PRESS_MASK)
        event_box.connect("button_press_event", lambda w,e: gtk.main_quit())
 
        # И другие вещи для которых нужно X Window...
        event_box.realize()
        event_box.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND1))
 
        # Выбираем зелёный фон
        event_box.modify_bg(gtk.STATE_NORMAL,
                            event_box.get_colormap().alloc_color("green"))
 
        window.show()
 
def main():
    gtk.main()
    return 0
 
if __name__ == "__main__":
    EventBoxExample()
    main()

Предыдущая страница На уровень выше  Следующая страница
9.15. Выбор шрифта (gtk.FontSelectionDialog) К оглавлению  10.2. Выравнивание (gtk.Alignment)

Один комментарий

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

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

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