Виджеты 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” иллюстрирует запуск этой программы:
Исходный код для 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) |