Окно прокрутки (gtk.ScrolledWindow)

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

Следующая функция используется для создания нового ScrolledWindow:

  scrolled_window = gtk.ScrolledWindow(hadjustment=None, vadjustment=None)

Где первый аргумент это регулятор для горизонтального направления, а второй для вертикального. Почти всегда они установлены в None или не указаны.

  scrolled_window.set_policy(hscrollbar_policy, vscrollbar_policy)

Этот метод указывает политику по отношению к полосам прокрутки. Первый аргумент устанавливает политику для горизонтальной полосы прокрутки, второй для вертикальной.

Политика может быть POLICY_AUTOMATIC или POLICY_ALWAYS. POLICY_AUTOMATIC будет автоматически скрывать полосы прокрутки когда они не нужны, когда POLICY_ALWAYS будет показывать их всегда.

Вы можете поместить свой объект в ScrolledWindow, используя следующий метод:

  scrolled_window.add_with_viewport(child)

Пример scrolledwin.py размещает  таблицу со 100 экземплярами ToggleButton в ScrolledWindow. Прокомментированы только новые для вас части кода. Рисунок 10.7, “Пример ScrolledWindow” иллюстрирует запуск этой программы:

Рисунок 10.7. Пример ScrolledWindow

Scrolled Window Example

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

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# example scrolledwin.py
 
import pygtk
pygtk.require('2.0')
import gtk
 
class ScrolledWindowExample:
    def destroy(self, widget):
        gtk.main_quit()
 
    def __init__(self):
        # Создаём новое диалоговое окно для размещения
        # в нём ScrolledWindow.
        window = gtk.Dialog()
        window.connect("destroy", self.destroy)
        window.set_title("ScrolledWindow example")
        window.set_border_width(0)
        window.set_size_request(300, 300)
 
        # Создаём ScrolledWindow.
        scrolled_window = gtk.ScrolledWindow()
        scrolled_window.set_border_width(10)
 
        # Политика может быть POLICY AUTOMATIC  или POLICY_ALWAYS.
        # POLICY_AUTOMATIC будет автоматически скрывать
        # полосы прокрутки, когда POLICY_ALWAYS всегда будет их
        # показывать. Первую будем использовать для горизонтальной,
        # а вторую для вертикальной.
        scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
 
        # Диалоговое окно создаётся с VBox размещённом в нём
        window.vbox.pack_start(scrolled_window, True, True, 0)
        scrolled_window.show()
 
        # Создаём таблицу 10х10
        table = gtk.Table(10, 10, False)
 
        # Указываем расстояние в 10 по х, и в 10 по у
        table.set_row_spacings(10)
        table.set_col_spacings(10)
 
        # Размещаем таблицу в ScrolledWindow
        scrolled_window.add_with_viewport(table)
        table.show()
 
        # Здесь просто заполняем таблицу виджетами
        # ToogleButton для демонстрации ScrolledWindow
        for i in range(10):
            for j in range(10):
                buffer = "button (%d,%d)" % (i, j)
                button = gtk.ToggleButton(buffer)
                table.attach(button, i, i+1, j, j+1)
                button.show()
 
        # Добавляем кнопку "Close" в нижнюю часть окна
        button = gtk.Button("close")
        button.connect_object("clicked", self.destroy, window)
 
        # И делаем её доступной по умолчанию
        button.set_flags(gtk.CAN_DEFAULT)
        window.action_area.pack_start( button, True, True, 0)
 
        # Это превразает кнопку в кнопку по умолчанию. Простое нажатие клавиши
        # "Enter" активирует кнопку.
        button.grab_default()
        button.show()
        window.show()
 
def main():
    gtk.main()
    return 0
 
if __name__ == "__main__":
    ScrolledWindowExample()
    main()

Попробуйте изменять резмеры окна. Обратите внимание на поведение полос прокрутки. Также вы можете использовать метод set_size_request() для того чтобы установить размер по умолчанию для окна или других виджетов.


Предыдущая страница На уровень выше  Следующая страница
10.8. Окно просмотра (gtk.Viewport) Оглавление  10.10. Группы кнопок (gtk.HButtonBox, gtk.VButtonBox)

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

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

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