Делимое окно (gtk.HPaned, gtk.VPaned)

Виджеты PannedWindow используются тогда, когда вам нужно разделить рабочую область на две части, в некотором соотношении размеров, и при этом данное соотношение должно контролироваться пользователем. Между этими двумя частями находится элемент, который пользователь может перетаскивать для изменения соотношения частей. Деление может быть горизонтальное( HPaned) или вертикальное (VPaned).

Для того чтобы создать PannedWindow нужно вызвать один из методов:

  hpane = gtk.HPaned()

  vpane = gtk.VPaned()

После создания виджета, вам следует добавить другие ваши виджеты на обе части созданного PanedWindow. Для добавления используются методы:

  paned.add1(child)

  paned.add2(child)

Метод add1() добавляет виджет на первую (верхнюю или левую) часть окна. Метод add2() добавляет на вторую (правую или нижнюю) часть.

Пример paned.py  создаёт  воображаемый интерфейс почтового клиента. Окно делится вертикально на две части, в верхней находится список писем, а нижняя часть содержит тексты сообщений. Большинство кода программы весьма простое. Но есть несколько замечаний: текст не может быть добавлен в виджет Text, пока он не реализован.  Изменить это можно с помощью вызова метода realize(), но в примере мы покажем другой способ, а именно – подключим обработчик к сигналу “realize” для добавления текста. Также, нам нужно добавить опцию SHRINK для некоторых элементов таблицы, содержащих текст и полосы прокрутки. Так, если нижнюю часть сделают меньше,  то отрежется правильная часть, вместо того чтобы уйти за нижний край окна. Рисунок 10.6, “Пример Panned Window” показывает результат запуска программы:

Рисунок 10.6. Пример Paned Window

Paned Example

Исходный код для программы paned.py:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# example paned.py
 
import pygtk
pygtk.require('2.0')
import gtk, gobject
 
class PanedExample:
    # Создаём список "сообщений"
    def create_list(self):
        # Создаём Scrolled Window, с полосами прокрутки появляющимися по необходимости
        scrolled_window = gtk.ScrolledWindow()
        scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
        model = gtk.ListStore(gobject.TYPE_STRING)
        tree_view = gtk.TreeView(model)
        scrolled_window.add_with_viewport (tree_view)
        tree_view.show()
 
        # Добавляем несколько сообщений на окно
        for i in range(10):
            msg = "Message #%d" % i
            iter = model.append()
            model.set(iter, 0, msg)
 
        cell = gtk.CellRendererText()
        column = gtk.TreeViewColumn("Messages", cell, text=0)
        tree_view.append_column(column)
 
        return scrolled_window
 
    # Добавляем немного текста на наш виджет Text - это callback запускаемый,
    # когда наше окно реализуется. Также мы могли бы заставить наше окно 
    # реализоваться вместе с gtk.Widget.realize(), но оно должно быть
    # первой в иерархии.
    def insert_text(self, buffer):
        iter = buffer.get_iter_at_offset(0)
        buffer.insert(iter,
                      "From: pathfinder@nasa.gov\n"
                      "To: mom@nasa.gov\n"
                      "Subject: Made it!\n"
                      "\n"
                      "We just got in this morning. The weather has been\n"
                      "great - clear but cold, and there are lots of fun sights.\n"
                      "Sojourner says hi. See you soon.\n"
                      " -Path\n")
 
    # Создаём прокручиваемую область текста, для отображения "сообщения"
    def create_text(self):
        view = gtk.TextView()
        buffer = view.get_buffer()
        scrolled_window = gtk.ScrolledWindow()
        scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scrolled_window.add(view)
        self.insert_text(buffer)
        scrolled_window.show_all()
        return scrolled_window
 
    def __init__(self):
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_title("Разделённые окна")
        window.connect("destroy", lambda w: gtk.main_quit())
        window.set_border_width(10)
        window.set_size_request(450, 400)
 
        # Создаём виджет vpaned и добавляем его на наше окно
        vpaned = gtk.VPaned()
        window.add(vpaned)
        vpaned.show()
 
        # Наполяем окно виджетами
        list = self.create_list()
        vpaned.add1(list)
        list.show()
 
        text = self.create_text()
        vpaned.add2(text)
        text.show()
        window.show()
 
def main():
    gtk.main()
    return 0
 
if __name__ == "__main__":
    PanedExample()
    main()

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

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

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

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