Учебники

PyGTK — Краткое руководство

PyGTK — Введение

PyGTK — это набор оболочек, написанных на Python и C для библиотеки GTK + GUI. Это часть проекта GNOME. Он предлагает комплексные инструменты для создания настольных приложений на Python. Также доступны привязки Python для других популярных библиотек GUI.

PyQt — это порт Python библиотеки QT. Наш учебник PyQt можно найти здесь . Аналогично, инструментарий wxPython — это привязка Python для wxWidgets, еще одной популярной кроссплатформенной библиотеки графического интерфейса. Наш учебник по wxPython доступен здесь .

GTK + или GIMP Toolkit — это многоплатформенный инструментарий для создания графических пользовательских интерфейсов. Предлагая полный набор виджетов, GTK + подходит для проектов, начиная от небольших одноразовых инструментов и заканчивая комплектами приложений.

GTK + был разработан с нуля для поддержки широкого спектра языков. PyGTK — это оболочка Python для GTK +.

GTK + построен вокруг следующих четырех библиотек —

  • Glib — базовая библиотека низкого уровня, которая составляет основу GTK +. Он обеспечивает обработку структуры данных для C.

  • Pango — библиотека для разметки и рендеринга текста с акцентом на интернационализацию.

  • Cairo — библиотека для 2D-графики с поддержкой нескольких устройств вывода (включая X Window System, Win32)

  • ATK — библиотека для набора интерфейсов, предоставляющая инструменты доступности, такие как программы чтения с экрана, лупы и альтернативные устройства ввода.

Glib — базовая библиотека низкого уровня, которая составляет основу GTK +. Он обеспечивает обработку структуры данных для C.

Pango — библиотека для разметки и рендеринга текста с акцентом на интернационализацию.

Cairo — библиотека для 2D-графики с поддержкой нескольких устройств вывода (включая X Window System, Win32)

ATK — библиотека для набора интерфейсов, предоставляющая инструменты доступности, такие как программы чтения с экрана, лупы и альтернативные устройства ввода.

Ваш GTK

PyGTK облегчает процесс и помогает создавать программы с графическим интерфейсом пользователя, используя язык программирования Python. Базовая библиотека GTK + предоставляет всевозможные визуальные элементы и утилиты для разработки полнофункциональных приложений для рабочего стола GNOME. PyGTK — это кроссплатформенная библиотека. Это бесплатное программное обеспечение, распространяемое по лицензии LGPL.

PyGTK построен на GTK + 2.x. Для создания приложений для GTK +3 также доступны привязки PyGObject.

PyGTK — Окружающая среда

PyGTK для Microsoft Windows

Установка PyGTK для Microsoft Windows включает следующие шаги:

  • Шаг 1 — Установите 32-битный интерпретатор Python (последняя версия Python 2.7)

  • Шаг 2 — Загрузите и установите GTK + runtime.

  • Шаг 3 — Загрузите и установите GTK + runtime — https://ftp.gnome.org

  • Шаг 4. Также рекомендуется загрузить модули PyCairo и PyGobject по следующим URL-адресам — https://ftp.gnome.org https://ftp.gnome.org/pub

  • Шаг 5. Для удобства также доступен универсальный установщик, который обрабатывает все зависимости PyGTK. Загрузите и установите последнюю версию установщика «все в одном» для Windows по следующему URL-адресу — https://ftp.gnome.org/pub/GNOME

Шаг 1 — Установите 32-битный интерпретатор Python (последняя версия Python 2.7)

Шаг 2 — Загрузите и установите GTK + runtime.

Шаг 3 — Загрузите и установите GTK + runtime — https://ftp.gnome.org

Шаг 4. Также рекомендуется загрузить модули PyCairo и PyGobject по следующим URL-адресам — https://ftp.gnome.org https://ftp.gnome.org/pub

Шаг 5. Для удобства также доступен универсальный установщик, который обрабатывает все зависимости PyGTK. Загрузите и установите последнюю версию установщика «все в одном» для Windows по следующему URL-адресу — https://ftp.gnome.org/pub/GNOME

PyGTK для Linux

PyGTK включен в большинство дистрибутивов Linux (включая Debian, Fedora, Ubuntu, RedHat и т. Д.); исходный код также можно скачать и скомпилировать по следующему URL

https://ftp.gnome.org/pub/GNOME/sources/pygtk/2.24/

PyGTK — Hello World

Создать окно с помощью PyGTK очень просто. Для продолжения нам сначала нужно импортировать модуль gtk в наш код.

import gtk

Модуль gtk содержит класс gtk.Window. Его объект создает окно верхнего уровня. Мы выводим класс из gtk.Window.

class PyApp(gtk.Window):

Определите конструктор и вызовите метод show_all () класса gtk.window.

def __init__(self):
   super(PyApp, self).__init__()
   self.show_all()

Теперь нам нужно объявить объект этого класса и запустить цикл обработки событий, вызвав его метод main ().

PyApp()
gtk.main()

Рекомендуется добавить метку «Hello World» в родительское окно.

label = gtk.Label("Hello World")
self.add(label)

Ниже приведен полный код для отображения «Hello World»

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_default_size(300,200)
      self.set_title("Hello World in PyGTK")
      label = gtk.Label("Hello World")
      self.add(label)
      self.show_all()
PyApp()
gtk.main()

Реализация приведенного выше кода даст следующий результат:

Hello World PyGTK

PyGTK — важные классы

Модуль PyGTK содержит различные виджеты. Класс gtk.Object действует как базовый класс для большинства виджетов, а также для некоторых классов, не относящихся к виджетам. Окно верхнего уровня для настольных приложений, использующих PyGTK, предоставляется классом gtk.Window. В следующей таблице перечислены важные виджеты и их функции —

S.NO Классы и описание
1

gtk.Widget

Это класс gtk.base для всех виджетов PyGTK. gtk.Widget предоставляет общий набор методов и сигналов для виджетов.

2

Gtk.Window

Это окно верхнего уровня, которое содержит один дочерний виджет. gtk.Window — это область отображения, украшенная строкой заголовка и элементами, позволяющими пользователю закрывать, изменять размеры и перемещать окно.

3

gtk.Button

Это виджет кнопки, который выдает сигнал при нажатии. gtk.Button обычно отображается в виде кнопки с текстовой меткой и обычно используется для добавления функции обратного вызова.

4

gtk.Entry

Это однострочный виджет для ввода текста.

5

gtk.Label

Этот виджет отображает ограниченное количество текста только для чтения.

6

gtk.ButtonBox

Это базовый класс для виджетов, который содержит несколько кнопок.

7

gtk.HBox

Это контейнер, который организует свои дочерние виджеты в одну горизонтальную строку.

8

gtk.VBox

Это контейнер, который организует свои дочерние виджеты в один столбец.

9

gtk.Fixed

Это контейнер, который может размещать дочерние виджеты в фиксированных позициях и с фиксированными размерами, заданными в пикселях.

10

gtk.Layout

Это обеспечивает бесконечную прокручиваемую область, содержащую дочерние виджеты и пользовательский рисунок.

11

gtk.MenuItem

Этот виджет реализует внешний вид и поведение пунктов меню. Производные подклассы виджетов gtk.MenuItem являются единственными допустимыми дочерними элементами меню. При выборе пользователем они могут отображать всплывающее меню или вызывать связанную функцию или метод

12

gtk.Menu

Это выпадающее меню, состоящее из списка объектов MenuItem, по которым пользователь может перемещаться и активироваться для выполнения функций приложения.

13

gtk.MenuBar

Это отображает пункты меню горизонтально в окне приложения или диалоговом окне.

14

gtk.ComboBox

Этот виджет используется для выбора из списка элементов.

15

gtk.Scale

Это горизонтальный или вертикальный ползунок для выбора числового значения.

16

gtk.Scrollbar

Это отображает горизонтальную или вертикальную полосу прокрутки.

17

gtk.ProgressBar

Это используется для отображения хода выполнения длительной операции.

18

gtk.Dialog

Это отображает всплывающее окно для пользовательской информации и действий.

19

gtk.Notebook

Этот виджет является контейнером, чьи дочерние элементы являются перекрывающимися страницами, которые можно переключать с помощью ярлыков вкладок.

20

gtk.Paned

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

21

gtk.TextView

Этот виджет отображает содержимое объекта TextBuffer.

22

gtk.Toolbar

Этот контейнер содержит и управляет набором кнопок и виджетов на горизонтальной или вертикальной панели.

23

gtk.TreeView

Этот виджет отображает содержимое стандартной TreeModel (ListStore, TreeStore, TreeModelSort)

24

gtk.DrawingArea

Этот виджет помогает в создании элементов пользовательского интерфейса. gtk.DrawingArea — это, по сути, пустой виджет, содержащий окно, в котором вы можете рисовать.

25

gtk.Calendar

Этот виджет отображает календарь и позволяет пользователю выбрать дату.

26

gtk.Viewport

Этот виджет отображает часть большего виджета.

gtk.Widget

Это класс gtk.base для всех виджетов PyGTK. gtk.Widget предоставляет общий набор методов и сигналов для виджетов.

Gtk.Window

Это окно верхнего уровня, которое содержит один дочерний виджет. gtk.Window — это область отображения, украшенная строкой заголовка и элементами, позволяющими пользователю закрывать, изменять размеры и перемещать окно.

gtk.Button

Это виджет кнопки, который выдает сигнал при нажатии. gtk.Button обычно отображается в виде кнопки с текстовой меткой и обычно используется для добавления функции обратного вызова.

gtk.Entry

Это однострочный виджет для ввода текста.

gtk.Label

Этот виджет отображает ограниченное количество текста только для чтения.

gtk.ButtonBox

Это базовый класс для виджетов, который содержит несколько кнопок.

gtk.HBox

Это контейнер, который организует свои дочерние виджеты в одну горизонтальную строку.

gtk.VBox

Это контейнер, который организует свои дочерние виджеты в один столбец.

gtk.Fixed

Это контейнер, который может размещать дочерние виджеты в фиксированных позициях и с фиксированными размерами, заданными в пикселях.

gtk.Layout

Это обеспечивает бесконечную прокручиваемую область, содержащую дочерние виджеты и пользовательский рисунок.

gtk.MenuItem

Этот виджет реализует внешний вид и поведение пунктов меню. Производные подклассы виджетов gtk.MenuItem являются единственными допустимыми дочерними элементами меню. При выборе пользователем они могут отображать всплывающее меню или вызывать связанную функцию или метод

gtk.Menu

Это выпадающее меню, состоящее из списка объектов MenuItem, по которым пользователь может перемещаться и активироваться для выполнения функций приложения.

gtk.MenuBar

Это отображает пункты меню горизонтально в окне приложения или диалоговом окне.

gtk.ComboBox

Этот виджет используется для выбора из списка элементов.

gtk.Scale

Это горизонтальный или вертикальный ползунок для выбора числового значения.

gtk.Scrollbar

Это отображает горизонтальную или вертикальную полосу прокрутки.

gtk.ProgressBar

Это используется для отображения хода выполнения длительной операции.

gtk.Dialog

Это отображает всплывающее окно для пользовательской информации и действий.

gtk.Notebook

Этот виджет является контейнером, чьи дочерние элементы являются перекрывающимися страницами, которые можно переключать с помощью ярлыков вкладок.

gtk.Paned

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

gtk.TextView

Этот виджет отображает содержимое объекта TextBuffer.

gtk.Toolbar

Этот контейнер содержит и управляет набором кнопок и виджетов на горизонтальной или вертикальной панели.

gtk.TreeView

Этот виджет отображает содержимое стандартной TreeModel (ListStore, TreeStore, TreeModelSort)

gtk.DrawingArea

Этот виджет помогает в создании элементов пользовательского интерфейса. gtk.DrawingArea — это, по сути, пустой виджет, содержащий окно, в котором вы можете рисовать.

gtk.Calendar

Этот виджет отображает календарь и позволяет пользователю выбрать дату.

gtk.Viewport

Этот виджет отображает часть большего виджета.

PyGTK — класс окна

Объект класса gtk.Window предоставляет виджет, который пользователи обычно считают Wwindow. Этот виджет является контейнером, следовательно, он может содержать один дочерний виджет. Он обеспечивает отображаемую область, украшенную строкой заголовка и элементами управления изменением размера.

Класс gtk.Window имеет следующий конструктор —

gtk.Window(type)

Тип paramter принимает одно из следующих значений —

gtk.WINDOW_TOPLEVEL (по умолчанию) Это окно не имеет родителя. Окна Toplevel — это главное окно приложения и диалоги.
gtk.WINDOW_POPUP Это окно не имеет рамки или украшений. Всплывающее окно используется для меню и всплывающих подсказок.

Некоторые из важных методов класса gtk.Window перечислены ниже —

S.NO Методы и описание
1

set_title (строка)

Это устанавливает свойство «title» gtk.window в значение, указанное в заголовке . Заголовок окна будет отображаться в строке заголовка.

2

get_title ()

Это возвращает заголовок окна, если установлено.

3

set_position ()

Это устанавливает положение окна. Предопределенные константы положения —

  • gtk.WIN_POS_NONE

  • gtk.WIN_POS_CENTER

  • gtk.WIN_POS_MOUSE

  • gtk.WIN_POS_CENTER_ALWAYS

  • gtk.WIN_POS_CENTER_ON_PARENT

3

set_focus ()

Это устанавливает виджет, указанный как виджет фокуса для окна.

4

set_resizable ()

Это верно по умолчанию. set_resizable () помогает пользователю установить размер окна.

5

set_decorated ()

Это верно по умолчанию. Если false, строка заголовка и элементы управления изменением размера окна будут отключены.

6

set_modal ()

Если true, окно становится модальным, и взаимодействие с другими окнами предотвращается. Это используется для виджетов Dialog.

7

set_default_size ()

Это устанавливает размер окна по умолчанию для указанной ширины и высоты в пикселях.

set_title (строка)

Это устанавливает свойство «title» gtk.window в значение, указанное в заголовке . Заголовок окна будет отображаться в строке заголовка.

get_title ()

Это возвращает заголовок окна, если установлено.

set_position ()

Это устанавливает положение окна. Предопределенные константы положения —

gtk.WIN_POS_NONE

gtk.WIN_POS_CENTER

gtk.WIN_POS_MOUSE

gtk.WIN_POS_CENTER_ALWAYS

gtk.WIN_POS_CENTER_ON_PARENT

set_focus ()

Это устанавливает виджет, указанный как виджет фокуса для окна.

set_resizable ()

Это верно по умолчанию. set_resizable () помогает пользователю установить размер окна.

set_decorated ()

Это верно по умолчанию. Если false, строка заголовка и элементы управления изменением размера окна будут отключены.

set_modal ()

Если true, окно становится модальным, и взаимодействие с другими окнами предотвращается. Это используется для виджетов Dialog.

set_default_size ()

Это устанавливает размер окна по умолчанию для указанной ширины и высоты в пикселях.

Виджет gtk.Window испускает следующие сигналы:

активировать по умолчанию Это генерируется, когда дочерний виджет окна по умолчанию активируется обычно пользователем, нажимающим клавишу Return или Enter.
активировать фокус Это происходит, когда дочерний виджет с фокусом активируется обычно пользователем, нажимающим клавишу пробела.
перемещение фокуса Это излучается, когда фокус изменяется внутри дочерних виджетов окна, когда пользователь нажимает клавиши Tab, Shift + Tab или клавиши со стрелками вверх, вниз, влево или вправо.
набор фокус Это испускается, когда фокус меняется на виджет в окне .

PyGTK — класс кнопок

Виджет gtk.Button обычно отображается в виде кнопки с текстовой меткой. Обычно используется для добавления функции или метода обратного вызова, который вызывается при нажатии кнопки.

Класс gtk.Button имеет следующий конструктор —

gtk.Button(label = None, stock = None, use_underline = True)

В которой,

  • Метка — текст, отображаемый меткой кнопки

  • Stock — идентификатор акции, идентифицирующий изображение и текст для использования в кнопке. По умолчанию нет.

  • Подчеркивание — если True, подчеркивание в тексте указывает на то, что следующий символ должен быть подчеркнут и использован для мнемонического ускорителя.

Метка — текст, отображаемый меткой кнопки

Stock — идентификатор акции, идентифицирующий изображение и текст для использования в кнопке. По умолчанию нет.

Подчеркивание — если True, подчеркивание в тексте указывает на то, что следующий символ должен быть подчеркнут и использован для мнемонического ускорителя.

Некоторые из предопределенных констант для параметра stock:

  • STOCK_OK
  • STOCK_STOP
  • STOCK_YES
  • STOCK_NO
  • STOCK_QUIT
  • STOCK_CANCEL
  • STOCK_CLOSE

Класс Button имеет следующие важные методы —

S.NO Методы и описание
1

set_label ()

Это устанавливает текст метки кнопки для метки. Эта строка также используется для выбора позиции товара, если свойство use_stock имеет значение True.

2

get_label ()

Это извлекает текст из метки кнопки

3

set_focus_on_click ()

Если True, кнопка захватывает фокус при щелчке мышью.

4

set_alignment ()

Это горизонтальное и вертикальное выравнивание дочернего виджета. Значение варьируется от 0,0 до 1,0.

5

set_image ()

Это устанавливает свойство изображения в значение изображения. Свойство «gtkbutton-images» должно быть установлено в True.

set_label ()

Это устанавливает текст метки кнопки для метки. Эта строка также используется для выбора позиции товара, если свойство use_stock имеет значение True.

get_label ()

Это извлекает текст из метки кнопки

set_focus_on_click ()

Если True, кнопка захватывает фокус при щелчке мышью.

set_alignment ()

Это горизонтальное и вертикальное выравнивание дочернего виджета. Значение варьируется от 0,0 до 1,0.

set_image ()

Это устанавливает свойство изображения в значение изображения. Свойство «gtkbutton-images» должно быть установлено в True.

Следующие сигналы испускаются виджетом Button —

активировать Это выдается, когда вызывается метод activ () gtk.Widget. Для кнопки это вызывает сигнал «нажал».
щелкнул Это излучается, когда кнопка мыши нажата и отпущена, когда указатель мыши находится над кнопкой или когда кнопка запускается с клавиатуры.

PyGTK — класс меток

Виджет «Метка» полезен для отображения нередактируемого текста. Метка используется многими другими виджетами внутри страны. Например, у кнопки есть метка для отображения текста на лице. Аналогично, объекты MenuItem имеют метку. Метка является объектом без окон, поэтому она не может получать события напрямую.

Класс Label имеет простой конструктор —

gtk.Label(str = None)

Следующие полезные методы могут быть использованы с объектом Label —

S.NO Методы и описание
1

set_text ()

Это устанавливает новый текст в качестве метки

2

get_text ()

Это возвращает текст с метки

3

set_use_underline ()

Если это правда, подчеркивание в тексте указывает, что следующий символ должен использоваться для клавиши мнемонического ускорителя.

4

set_justify

Это устанавливает выравнивание строк в тексте метки относительно друг друга.

Возможные значения — gtk.JUSTIFY_LEFT, gtk.JUSTIFY_RIGHT, gtk.JUSTIFY_CENTER и gtk.JUSTIFY_FILL.

5

Set_line_wrap ()

Если true, строка будет перенесена

6

set_selectable ()

Если true, текст в метке может быть выбран для копирования-вставки

7

set_width_chars ()

Это устанавливает ширину метки

set_text ()

Это устанавливает новый текст в качестве метки

get_text ()

Это возвращает текст с метки

set_use_underline ()

Если это правда, подчеркивание в тексте указывает, что следующий символ должен использоваться для клавиши мнемонического ускорителя.

set_justify

Это устанавливает выравнивание строк в тексте метки относительно друг друга.

Возможные значения — gtk.JUSTIFY_LEFT, gtk.JUSTIFY_RIGHT, gtk.JUSTIFY_CENTER и gtk.JUSTIFY_FILL.

Set_line_wrap ()

Если true, строка будет перенесена

set_selectable ()

Если true, текст в метке может быть выбран для копирования-вставки

set_width_chars ()

Это устанавливает ширину метки

Следующие сигналы испускаются виджетом метки —

активировать тока линии связи Это происходит, когда пользователь активирует ссылку в ярлыке.
активировать линии связи Это излучается для активации URI.
Копия-буфер обмена Это испускается, когда текст копируется из метки в буфер обмена.

PyGTK — начальный класс

Виджет ввода — это однострочный виджет ввода текста. Если введенный текст длиннее, чем выделение виджета, виджет будет прокручиваться так, чтобы позиция курсора была видна.

Поле ввода можно преобразовать в режиме пароля с помощью метода set_visibility () этого класса. Введенный текст заменяется символом, выбранным методом invisible_char (), по умолчанию это «*».

Класс Entry имеет следующий конструктор —

gtk.Entry(max = 0)

Здесь max обозначает максимальную длину поля ввода в символах. Параметр принимает числовое значение (0-65536).

В следующей таблице показаны важные методы класса Entry —

S.NO Методы и описание
1

set_visibility (видимый)

Если false, содержимое скрывается заменой символов на невидимый символ по умолчанию — ‘*’

2

set_invisible_char (символ)

Символы * по умолчанию в поле ввода заменяются на символы

3

set_max_length (х)

Это устанавливает свойство «max-length» в значение x. (0-65536)

4

set_text (ул)

Это устанавливает свойство «text» в значение str . Строка в str заменяет текущее содержимое записи.

5

get_text ()

Это возвращает значение свойства «text», которое представляет собой строку, содержащую содержимое записи.

6

set_alignment ()

Это устанавливает свойство «xalign» равным значению xalign . set_alignment () управляет горизонтальным расположением содержимого в поле ввода.

set_visibility (видимый)

Если false, содержимое скрывается заменой символов на невидимый символ по умолчанию — ‘*’

set_invisible_char (символ)

Символы * по умолчанию в поле ввода заменяются на символы

set_max_length (х)

Это устанавливает свойство «max-length» в значение x. (0-65536)

set_text (ул)

Это устанавливает свойство «text» в значение str . Строка в str заменяет текущее содержимое записи.

get_text ()

Это возвращает значение свойства «text», которое представляет собой строку, содержащую содержимое записи.

set_alignment ()

Это устанавливает свойство «xalign» равным значению xalign . set_alignment () управляет горизонтальным расположением содержимого в поле ввода.

Следующие сигналы испускаются виджетом входа —

активировать Это происходит, когда запись активируется либо действием пользователя, либо программно с помощью метода gtk.Widget.activate () .
возврат на одну позицию Это излучается, когда клавиша Backspace вводится с клавиатуры.
Копия-буфер обмена Это излучается, когда выделенный текст в записи копируется в буфер обмена.
вырезать-буфер Это излучается, когда выделение в записи обрезается и помещается в буфер обмена.
паста-буфер Это излучается, когда содержимое буфера обмена вставляется в запись.

PyGTK — Обработка сигналов

В отличие от приложения в консольном режиме, которое выполняется последовательно, приложение на основе графического интерфейса управляется событиями. Функция gtk.main () запускает бесконечный цикл. События, происходящие в GUI, передаются в соответствующие функции обратного вызова.

Каждый виджет PyGTK, производный от класса GObject, предназначен для передачи «сигнала» в ответ на одно или несколько событий. Сигнал сам по себе не выполняет никаких действий. Вместо этого он «связан» с функцией обратного вызова.

Некоторые сигналы наследуются виджетом, тогда как некоторые сигналы зависят от виджета. Например, «переключаемый» сигнал испускается виджетом toggleButton.

Обработчик сигнала настраивается путем вызова метода connect () класса gtk.widget.

handler_id = object.connect(name, func, func_data)
  • Первый аргумент name — это строка, содержащая название сигнала, который вы хотите перехватить.

  • Второй аргумент, func , это функция обратного вызова, которую вы хотите вызывать, когда она перехватывается.

  • Третий аргумент, func_data , данные, которые вы хотите передать этой функции.

  • Идентификатор обработчика, который используется для уникальной идентификации метода обратного вызова.

Первый аргумент name — это строка, содержащая название сигнала, который вы хотите перехватить.

Второй аргумент, func , это функция обратного вызова, которую вы хотите вызывать, когда она перехватывается.

Третий аргумент, func_data , данные, которые вы хотите передать этой функции.

Идентификатор обработчика, который используется для уникальной идентификации метода обратного вызова.

Например, чтобы вызвать функцию onClicked () при нажатии кнопки, используйте следующий синтаксис —

btn.connect("clicked",onClicked,None)

Функция onClicked () определяется как —

def onClicked(widget, data=None):

Если метод обратного вызова является объектным методом, он получает self в качестве дополнительного аргумента —

def onClicked(self, widget, data=None):

пример

В следующем примере Button добавляется в gtk.Window. Сообщение «Hello World» печатается при нажатии кнопки.

import gtk
class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Hello World in PyGTK")
      self.set_default_size(400,300)
      self.set_position(gtk.WIN_POS_CENTER)
		
      self.label = gtk.Label("Enter name")
      self.entry = gtk.Entry()
		
      self.btn = gtk.Button("Say Hello")
      self.btn.connect("clicked",self.hello)
		
      fixed = gtk.Fixed()
      fixed.put(self.label, 100,100)
      fixed.put(self.entry, 100,125)
      fixed.put(self.btn,100,150)
		
      self.add(fixed)
      self.show_all()
		
   def hello(self,widget):
      print "hello",self.entry.get_text()
PyApp()
gtk.main()

Запустите приведенный выше код из командной строки Python. Будет отображен следующий вывод —

Обработка сигналов

При нажатии кнопки на консоли отображается следующий вывод:

Hello TutorialsPoint

PyGTK — обработка событий

В дополнение к сигнальному механизму, системные события окна также могут быть связаны с функциями обратного вызова. Изменение размера окна, нажатие клавиши, событие прокрутки и т. Д. — это некоторые из общих системных событий окна. Эти события сообщаются в основной цикл приложения. Оттуда они передаются через сигналы в функции обратного вызова.

Некоторые из системных событий перечислены ниже —

  • button_press_event
  • button_release_event
  • scroll_event
  • motion_notify_event
  • delete_event
  • destroy_event
  • expose_event
  • key_press_event
  • key_release_event

Метод connect () используется для связи события с функцией обратного вызова в соответствии с синтаксисом:

Object.connect(name, function, data)

Здесь name обозначает строку, соответствующую названию события, которое должно быть захвачено. И, функция — это имя функции обратного вызова, которая должна вызываться при возникновении события. Данные — это аргумент, который передается в функцию обратного вызова.

Следовательно, следующий код соединяет виджет Button и захватывает событие button_press —

self.btn.connect("button_press_event", self.hello)

Следующим будет прототип функции hello () —

def hello(self,widget,event):

пример

Ниже приведен код для обработчика события кнопки —

import gtk
class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Hello World in PyGTK")
      self.set_default_size(400,300)
      self.set_position(gtk.WIN_POS_CENTER)
		
      self.label = gtk.Label("Enter name")
      self.entry = gtk.Entry()
      self.btn = gtk.Button("Say Hello")
      self.btn.connect("button_press_event", self.hello)
		
      fixed = gtk.Fixed()
      fixed.put(self.label, 100,100)
      fixed.put(self.entry, 100,125)
      fixed.put(self.btn,100,150)
		
      self.add(fixed)
      self.show_all()
		
   def hello(self,widget,event):
      print "hello",self.entry.get_text()

PyApp()
gtk.main()

Когда вы запускаете приведенный выше код, он отображает следующий вывод на консоли —

Hello TutorialsPoint

PyGTK — Контейнеры

Библиотека PyGTK предоставляет различные классы контейнеров для управления размещением виджетов внутри окна. Самый простой способ — использовать фиксированный контейнерный класс и поместить в него виджет, указав его абсолютные координаты, измеренные в пикселях.

Давайте теперь следуем за этими шагами —

Шаг 1 — Объявить объект фиксированного класса

fixed = gtk.Fixed()

Шаг 2 — Создайте виджет кнопки и добавьте его в фиксированный контейнер с помощью метода put (), которому нужны координаты x и y. Здесь кнопка будет размещена в (100 100) позиции.

btn = gtk.Button("Hello")
fixed.put(btn, 100,100)

Шаг 3 — Вы можете разместить несколько элементов управления в фиксированном контейнере. И добавьте его в окно верхнего уровня и вызовите метод show_all ()

self.add(fixed)
self.show_all()

Этот Абсолютный Макет, однако, не подходит по следующим причинам:

  • Положение виджета не изменяется даже при изменении размера окна.
  • Внешний вид может быть неодинаковым на разных устройствах отображения с разным разрешением.
  • Модификация в макете сложна, так как может потребоваться перепроектирование всей формы.

Ниже оригинальное окно

Привет, мир

Следующее окно изменено в размере

PyGTK Hello World

Положение кнопки здесь не меняется.

PyGTK API предоставляет контейнерные классы для расширенного управления позиционированием виджетов внутри контейнера. Преимущества менеджеров по расположению над абсолютным позиционированием:

  • Виджеты внутри окна автоматически изменяются.
  • Обеспечивает равномерное отображение на устройствах отображения с различными разрешениями.
  • Динамическое добавление или удаление виджета возможно без изменения дизайна.

gtk.Container действует как базовый класс для следующих классов:

  • gtk.ButtonBox
  • gtk.Box
  • gtk.Alignment
  • gtk.EventBox
  • gtk.Table

PyGTK — Box Class

Класс gtk.Box — это абстрактный класс, определяющий функциональные возможности контейнера, в котором виджеты размещаются в прямоугольной области. Виджеты gtk.HBox и gtk.VBox являются производными от него.

Дочерние виджеты в gtk.Hbox располагаются горизонтально в одной строке. С другой стороны, дочерние виджеты gtk.VBox расположены вертикально в том же столбце.

Класс gtk.Box использует следующий конструктор —

gtk.Box(homogenous = True, spacing = 0)

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

gtk.Box использует механизм упаковки для размещения в нем дочерних виджетов со ссылкой на определенную позицию, либо со ссылкой на начало или конец. Метод pack_start () размещает виджеты от начала до конца. Наоборот, метод pack_end () помещает виджеты от начала до конца. Кроме того, вы можете использовать метод add (), который похож на pack_start ().

Следующие методы доступны как для gtk.HBox, так и для gtk.VBox —

  • gtk_box_pack_start ()

  • gtk_box_pack_end ()

gtk_box_pack_start ()

gtk_box_pack_end ()

gtk_box_pack_start ()

Этот метод добавляет дочерний элемент в блок, упакованный со ссылкой на начало блока —

pack_start(child, expand = True, fill = True, padding = 0)

Ниже приведены параметры —

  • child — это объект виджета, который будет добавлен в поле

  • раскрыть — устанавливается в значение «Истина», если дочернему элементу нужно предоставить дополнительное пространство в поле. Дополнительное пространство делится между всеми дочерними виджетами .

  • fill — Если True, дополнительное место будет выделено дочернему элементу. В противном случае этот параметр используется в качестве отступа.

  • padding — это расстояние в пикселях между виджетами в окне.

child — это объект виджета, который будет добавлен в поле

раскрыть — устанавливается в значение «Истина», если дочернему элементу нужно предоставить дополнительное пространство в поле. Дополнительное пространство делится между всеми дочерними виджетами .

fill — Если True, дополнительное место будет выделено дочернему элементу. В противном случае этот параметр используется в качестве отступа.

padding — это расстояние в пикселях между виджетами в окне.

gtk_box_pack_end ()

Это добавляет ребенка в коробку, упакованную со ссылкой на конец коробки.

pack_end (child, expand = True, fill = True, padding = 0)

Ниже приведены параметры —

  • child — это объект виджета, который будет добавлен

  • раскрыть — устанавливается в значение «Истина», если дочернему элементу нужно предоставить дополнительное пространство в поле. Это дополнительное пространство разделено между всеми дочерними виджетами.

  • fill — Если True, дополнительное пространство будет выделено дочернему элементу, в противном случае используется как заполнение.

  • padding — это расстояние в пикселях между виджетами в окне.

child — это объект виджета, который будет добавлен

раскрыть — устанавливается в значение «Истина», если дочернему элементу нужно предоставить дополнительное пространство в поле. Это дополнительное пространство разделено между всеми дочерними виджетами.

fill — Если True, дополнительное пространство будет выделено дочернему элементу, в противном случае используется как заполнение.

padding — это расстояние в пикселях между виджетами в окне.

set_spacing (интервал) — это функция, которая устанавливает количество пикселей для размещения между дочерними элементами блока.

Метод add (widget) унаследован от класса gtk.Container. Добавляет виджет в контейнер. Этот метод можно использовать вместо метода pack_start ().

пример

В приведенном ниже примере окно верхнего уровня содержит вертикальное поле (поле объекта gtk.VBox). Он, в свою очередь, имеет объект VBox vb и объект HBox hb. В верхнем поле метка, виджет ввода и кнопка расположены вертикально. В нижнем поле другой набор метки, запись и кнопка расположены вертикально.

Соблюдайте следующий код —

import gtk
class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
         self.set_title("Box demo")
		
      box = gtk.VBox()
      vb = gtk.VBox()
      lbl = gtk.Label("Enter name")
		
      vb.pack_start(lbl, expand = True, fill = True, padding = 10)
      text = gtk.Entry()
		
      vb.pack_start(text, expand = True, fill = True, padding = 10)
      btn = gtk.Button(stock = gtk.STOCK_OK)
		
      vb.pack_start(btn, expand = True, fill = True, padding = 10)
      hb = gtk.HBox()
		
      lbl1 = gtk.Label("Enter marks")
      hb.pack_start(lbl1, expand = True, fill = True, padding = 5)
      text1 = gtk.Entry()
		
      hb.pack_start(text1, expand = True, fill = True, padding = 5)
      btn1 = gtk.Button(stock = gtk.STOCK_SAVE)
		
      hb.pack_start(btn1, expand = True, fill = True, padding = 5)
      box.add(vb)
      box.add(hb)
      self.add(box)
      self.show_all()
PyApp()
gtk.main()

Приведенный выше код выдаст следующий вывод:

Box Demo

PyGTK — класс ButtonBox

Класс ButtonBox в gtk API служит базовым классом для контейнеров, в которых можно удерживать несколько кнопок по горизонтали или по вертикали. Два подкласса HButtonBox и VButtonBox являются производными от класса ButtonBox, который сам является подклассом класса gtk.Box.

Блок кнопок используется для обеспечения согласованного расположения кнопок в приложении. Он предоставляет один макет по умолчанию и значение интервала по умолчанию, которые являются постоянными во всех виджетах.

Метод set_spacing () класса gtk.Box можно использовать для изменения расстояния по умолчанию между кнопками в блоке кнопок.

Расположение кнопок по умолчанию можно изменить с помощью метода set_default () . Возможные значения макета кнопки —

  • gtk.BUTTONBOX_SPREAD

  • gtk.BUTTONBOX_EDGE

  • gtk.BUTTONBOX_START

  • gtk.BUTTONBOX_END.

gtk.BUTTONBOX_SPREAD

gtk.BUTTONBOX_EDGE

gtk.BUTTONBOX_START

gtk.BUTTONBOX_END.

пример

В следующем примере объект VBox внутри окна верхнего уровня внутри содержит один объект VButtonBox и один объект HButtonBox, каждая из которых содержит две кнопки, расположенные вертикально и горизонтально соответственно.

Соблюдайте код —

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("Button Box demo")
      self.set_size_request(200,100)
      self.set_position(gtk.WIN_POS_CENTER)
	  vb = gtk.VBox()
      box1 = gtk.VButtonBox()
      btn1 = gtk.Button(stock = gtk.STOCK_OK)
      btn2 = gtk.Button(stock = gtk.STOCK_CANCEL)
		
      box1.pack_start(btn1, True, True, 0)
      box1.pack_start(btn2, True, True, 0)
      box1.set_border_width(5)
		
      vb.add(box1)
      box2 = gtk.HButtonBox()
      btn3 = gtk.Button(stock = gtk.STOCK_OK)
      btn4 = gtk.Button(stock = gtk.STOCK_CANCEL)
		
      ent = gtk.Entry()
      box2.pack_start(btn3, True, True, 0)
      box2.pack_start(btn4, True, True, 0)
      box1.set_border_width(5)
		
      vb.add(box2)
      self.add(vb)
      self.show_all()

PyApp()
gtk.main()

Приведенный выше код генерирует следующий вывод —

ButtonBox Demo

PyGTK — Класс выравнивания

Этот виджет оказывается полезным в управлении выравниванием и размером его дочерних виджетов. Он имеет четыре свойства: xalign, yalign, xscale и yscale. Свойства масштаба определяют, сколько свободного места будет использоваться дочерними виджетами. Свойства выравнивания используются для размещения дочернего виджета в доступной области.

Все четыре свойства принимают значение с плавающей точкой от 0 до 1,0. Если для свойства xscale и yscale установлено значение 0, это означает, что виджет не поглощает свободного пространства, а если установлено значение 1, виджет поглощает максимальное свободное пространство по горизонтали или вертикали соответственно.

Свойство xalign и yalign, если установлено в 0, означает, что не будет свободного места слева или над виджетом. Если установлено значение 1, слева или над виджетом будет максимально свободное пространство.

Класс gtk.alignment имеет следующий конструктор —

gtk.alignment(xalign = 0.0, yalign = 0.0, xscale = 0.0, yscale = 0.0)

Куда,

  • xalign — доля свободного пространства по горизонтали слева от дочернего виджета.

  • yalign — доля свободного пространства по вертикали над дочерним виджетом.

  • xscale — это доля горизонтального свободного пространства, которое поглощает дочерний виджет.

  • yscale — это доля вертикального свободного пространства, которое поглощает дочерний виджет.

xalign — доля свободного пространства по горизонтали слева от дочернего виджета.

yalign — доля свободного пространства по вертикали над дочерним виджетом.

xscale — это доля горизонтального свободного пространства, которое поглощает дочерний виджет.

yscale — это доля вертикального свободного пространства, которое поглощает дочерний виджет.

пример

Следующий код демонстрирует использование виджета gtk.alignment. Vbox в верхнем окне имеет верхний Vbox и нижний Hbox. В верхнем вертикальном поле метка и виджет Entry расположены таким образом, чтобы слева оставалось 50% свободного пространства, а более 25% из них занято назначением свойств 0,5 xalign и 0,25 yalign.

В нижнем HBox все доступное свободное пространство находится слева. Это достигается назначением 1 для свойства xalign. Следовательно, две кнопки в горизонтальном поле отображаются выровненными по правому краю.

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Alignment demo")
      self.set_size_request(400,200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      vbox = gtk.VBox(False, 5)
      vb = gtk.VBox()
      hbox = gtk.HBox(True, 3)
      valign = gtk.Alignment(0.5,0.25, 0, 0)
		
      lbl = gtk.Label("Name of student")
      vb.pack_start(lbl, True, True, 10)
      text = gtk.Entry()
		
      vb.pack_start(text, True, True, 10)
      valign.add(vb)
      vbox.pack_start(valign)
		
      ok = gtk.Button("OK")
      ok.set_size_request(70, 30)
		
      close = gtk.Button("Close")
      hbox.add(ok)
      hbox.add(close)
		
      halign = gtk.Alignment(1, 0, 0, 0)
      halign.add(hbox)
		
      vbox.pack_start(halign, False, False, 3)
		
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
PyApp()
gtk.main()

Приведенный выше код производит следующий вывод —

Выравнивание Демо

PyGTK — EventBox Class

Некоторые виджеты в наборе инструментов PyGTK не имеют своего собственного окна. Такие виджеты без окон не могут получать сигналы событий. Такие виджеты, например, метка, если они помещены в коробку событий, могут принимать сигналы.

EventBox — это невидимый контейнер, который предоставляет окно для виджетов без окон. У него есть простой конструктор без аргументов —

gtk.EventBox()

пример

В следующем примере два виджета gtk.EventBox помещаются в окно верхнего уровня. Внутри каждого окна событий добавляется метка. Поле событий теперь подключено к функции обратного вызова для обработки события button_press_event. Поскольку сам ящик событий невидим, фактически событие происходит во встроенной метке. Следовательно, когда мы нажимаем на любую метку, вызывается соответствующая функция обратного вызова.

Соблюдайте код —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("EventBox demo")
      self.set_size_request(200,100)
      self.set_position(gtk.WIN_POS_CENTER)
      fixed = gtk.Fixed()
      
      event1 = gtk.EventBox()
      label1 = gtk.Label("Label 1")
      event1.add(label1)
      fixed.put(event1, 80,20)
      
      event1.connect("button_press_event",self.hello1)
      event2 = gtk.EventBox()
      label2 = gtk.Label("Label 2")
      event2.add(label2)
      event2.connect("button_press_event",self.hello2)
      fixed.put(event2, 80,70)
      
      self.add(fixed)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def hello1(self, widget, event):
      print "clicked label 1"
		
   def hello2(self, widget, event):
      print "clicked label 2"

PyApp()
gtk.main()

Приведенный выше код генерирует следующий вывод —

EventBox Demo

При нажатии на ярлык 1 на консоли выводится сообщение «щелкнул ярлык 1». Аналогичным образом, при нажатии на ярлык 2 печатается сообщение «щелкнул ярлык 2».

PyGTK — класс раскладок

Gtk.Layout — это контейнерный виджет, похожий на gtk.Fixed. Виджеты размещаются в виджете Layout путем указания абсолютных координат. Однако макет отличается от фиксированного виджета следующими способами:

  • Виджет макета может иметь бесконечную ширину и высоту. Максимальное значение ширины и высоты ограничено размером целого числа без знака.

  • Виджет gtk.DrawingArea может быть заключен в контейнер макета. DrawingArea — это холст, на котором можно рисовать 2D-элементы, такие как линия, прямоугольник и т. Д.

  • Чтобы поместить контейнер Layout в окно верхнего уровня меньших размеров, его можно связать с полосами прокрутки или поместить в ScrolledWindow.

Виджет макета может иметь бесконечную ширину и высоту. Максимальное значение ширины и высоты ограничено размером целого числа без знака.

Виджет gtk.DrawingArea может быть заключен в контейнер макета. DrawingArea — это холст, на котором можно рисовать 2D-элементы, такие как линия, прямоугольник и т. Д.

Чтобы поместить контейнер Layout в окно верхнего уровня меньших размеров, его можно связать с полосами прокрутки или поместить в ScrolledWindow.

Класс gtk.Layout имеет следующий конструктор —

gtk.Layout(hadjustment = None, vadjustment = None)

Свойства hadjustment и vadjustment представляют объект, имеющий регулируемое ограниченное значение.

В следующей таблице перечислены часто используемые методы макета —

положить (виджет, х, у) Размещает дочерний виджет в указанных координатах
set_size (w, h) Устанавливает размер контейнера макета на указанную ширину и высоту

Объект Layout испускает сигнал set_scroll_adjustment при изменении связанных с ним корректировок.

пример

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

Соблюдайте код —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("layout")
      self.set_size_request(300,200)
      self.set_position(gtk.WIN_POS_CENTER)
      sc = gtk.ScrolledWindow()
      lo = gtk.Layout()
      lo.set_size(400,400)
      button = gtk.Button("Press Me")
      lo.put(button, 125,200)
      sc.add(lo)
      self.add(sc)
      self.connect("destroy", gtk.main_quit)
      self.show_all()

PyApp()
gtk.main()

Приведенный выше код сгенерирует следующий вывод:

раскладка

PyGTK — класс ComboBox

ComboBox — это мощный и популярный виджет в любом GUI-инструментарии. Он предоставляет раскрывающийся список элементов, из которых пользователь может выбирать. Виджет gtk.ComboBox реализует интерфейс CellLayout и предоставляет ряд методов для управления отображением элементов.

Объект класса gtk.ComboBox связан с ListSore, который представляет собой модель списка, которую можно использовать с виджетами, отображающими коллекцию элементов. Элементы добавляются в ListStore с помощью метода append (). Кроме того, объект CellRendererText создается и упаковывается в комбинированный список.

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

combobox = gtk.ComboBox()
store = gtk.ListStore(gobject.TYPE_STRING)
cell = gtk.CellRendererText()
combobox.pack_start(cell)
combobox.add_attribute(cell, 'text', 0)

PyGTK предлагает удобный метод — gtk.combo_box_new_text () для создания поля со списком вместо использования хранилища списков. Связанные вспомогательные методы append_text (), prepend_text (), insert_text () и remove_text () используются для управления содержимым комбинированного списка.

Класс gtk.ComboBox имеет следующие методы —

S.NO Методы и описание
1

set_wrap_width ()

Устанавливает количество столбцов, которые будут отображаться в макете всплывающей таблицы

2

get_active ()

Возвращает значение «активного» свойства, которое является индексом в модели текущего активного элемента.

3

установить активное()

Устанавливает активный элемент combo_box на элемент с указанным модельным индексом

4

set_model ()

Устанавливает модель, используемую в поле со списком

5

append_text ()

Добавляет строку, заданную текстом, в список строк, хранящихся в хранилище списка со списком

6

Insert_text ()

Вставляет строку, заданную текстом, в поле со списком gtk.ListStore по индексу, указанному позицией

7

prepend_text ()

Добавляет строку, указанную в тексте, в список строк, хранящихся в хранилище списка.

8

remove_text ()

Удаляет строку по индексу, указанному позицией в связанном хранилище списков

9

get_active_text ()

Возвращает текущую активную строку

set_wrap_width ()

Устанавливает количество столбцов, которые будут отображаться в макете всплывающей таблицы

get_active ()

Возвращает значение «активного» свойства, которое является индексом в модели текущего активного элемента.

установить активное()

Устанавливает активный элемент combo_box на элемент с указанным модельным индексом

set_model ()

Устанавливает модель, используемую в поле со списком

append_text ()

Добавляет строку, заданную текстом, в список строк, хранящихся в хранилище списка со списком

Insert_text ()

Вставляет строку, заданную текстом, в поле со списком gtk.ListStore по индексу, указанному позицией

prepend_text ()

Добавляет строку, указанную в тексте, в список строк, хранящихся в хранилище списка.

remove_text ()

Удаляет строку по индексу, указанному позицией в связанном хранилище списков

get_active_text ()

Возвращает текущую активную строку

Виджет ComboBox испускает следующие сигналы —

изменено Это испускается, когда новый элемент в поле со списком выбран
move_active Это сигнал привязки клавиш, который генерируется для перемещения активного выбора.
в раскрывающемся меню Это сигнал привязки клавиш, который отправляется в раскрывающийся список со списком. Привязки по умолчанию для этого сигнала: Alt + Up и Escape
Неожиданно возникнуть Это сигнал привязки клавиш, который выдается для всплывающего списка со списком. Привязки по умолчанию для этого сигнала — Alt + Down.

Два примера кода для демонстрации ComboBox приведены ниже.

Пример 1

В этом примере ListStore заполняется именами популярных наборов инструментов Python GUI и связывается с виджетом ComboBox. Когда пользователь делает выбор, измененный сигнал испускается. Он связан с функцией обратного вызова для отображения выбора пользователя.

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

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("ComboBox with ListStore")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      combobox = gtk.ComboBox()
      store = gtk.ListStore(str)
      cell = gtk.CellRendererText()
      combobox.pack_start(cell)
      combobox.add_attribute(cell, 'text', 0)
      fixed = gtk.Fixed()
      lbl = gtk.Label("select a GUI toolkit")
      fixed.put(lbl, 25,75)
      fixed.put(combobox, 125,75)
      lbl2 = gtk.Label("Your choice is:")
      fixed.put(lbl2, 25,125)
      self.label = gtk.Label("")
      fixed.put(self.label, 125,125)
      self.add(fixed)
      
      store.append (["PyQt"])
      store.append (["Tkinter"])
      store.append (["WxPython"])
      store.append (["PyGTK"])
      store.append (["PySide"])
      combobox.set_model(store)
      combobox.connect('changed', self.on_changed)
      combobox.set_active(0)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
      return
   
   def on_changed(self, widget):
      self.label.set_label(widget.get_active_text())
      return
      
if __name__ == '__main__':
PyApp()
gtk.main()

После выполнения программа отображает следующий вывод:

Поле со списком

Пример 2

Вторая версия программы использует удобный метод combo_box_new_text () для создания поля со списком и функцию append_text () для добавления строк в него. В обеих программах метод get_active_text () используется для получения выбора пользователя и отображения на ярлыке в окне.

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Simple ComboBox")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      cb = gtk.combo_box_new_text()
      cb.connect("changed", self.on_changed)
      cb.append_text('PyQt')
      cb.append_text('Tkinter')
      cb.append_text('WxPython')
      cb.append_text('PyGTK')
      cb.append_text('PySide')
      
      fixed = gtk.Fixed()
      lbl = gtk.Label("select a GUI toolkit")
      fixed.put(lbl, 25,75)
      
      fixed.put(cb, 125,75)
      lbl2 = gtk.Label("Your choice is:")
      fixed.put(lbl2, 25,125)
      
      self.label = gtk.Label("")
      fixed.put(self.label, 125,125)
      self.add(fixed)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
   
   def on_changed(self, widget):
      self.label.set_label(widget.get_active_text())
if __name__ == '__main__':
   PyApp()
   gtk.main()

Вывод этой программы аналогичен предыдущей программе.

Поле со списком

PyGTK — ToggleButton Class

Виджет ToggleButton представляет собой gtk.Button с двумя состояниями — нажатием или активным (или включенным) состоянием и нормальным или неактивным (или выключенным) состоянием. При каждом нажатии кнопки состояние меняется. Состояние ToggleButton также может быть программно изменено методом set_active (). Для переключения состояния кнопки также доступен метод toggled ().

Класс gtk.ToggleButton имеет следующий конструктор —

gtk.ToggleButton(label = None, use_underline = True)

Здесь метка — это тест, отображаемый на кнопке. Свойство use_underline, если True, подчеркивание в тексте указывает, что следующий символ должен быть подчеркнут и использован для ускорителя мнемоники.

Некоторые из важных методов класса gtk.ToggleButton приведены в следующей таблице:

установить активное() При этом для свойства active устанавливается значение True (активно или нажато или включено) или False (неактивно или нормально или выключено)
get_active () Это возвращает состояние кнопки
переключены () Это издает «переключенный» сигнал на кнопке переключения.

Виджет ToggleButton испускает следующий сигнал —

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

Приведенный ниже код демонстрирует использование виджетов ToggleButton.

Два виджета ToggleButtons и Label помещаются в контейнер VBox. Переключаемый сигнал, испускаемый Button1, подключается к функции обратного вызова on_toggled (). В этой функции состояние Button2 устанавливается на True, если для Button1 установлено значение False, и наоборот.

if self.btn1.get_active() == True:
   self.btn2.set_active(False)
else:
   self.btn2.set_active(True)

Он отображает мгновенные состояния кнопок на ярлыке.

пример

Соблюдайте следующий код —

import gtk

 PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Toggle Button")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      vbox = gtk.VBox()
      self.btn1 = gtk.ToggleButton("Button 1")
      self.btn1.connect("toggled", self.on_toggled)
      self.btn2 = gtk.ToggleButton("Button 2")
      self.lbl = gtk.Label()
      
      vbox.add(self.btn1)
      vbox.add(self.btn2)
      vbox.add(self.lbl)
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
   
   def on_toggled(self, widget, data = None):
      if self.btn1.get_active() == True:
         self.btn2.set_active(False)
      else:
         self.btn2.set_active(True)
         state = "Button1 : "+str(self.btn1.get_active())+" 
         Button2 : "+str(self.btn2.get_active())
         self.lbl.set_text(state)
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код генерирует следующий вывод —

Кнопка-переключатель

PyGTK — CheckButton Class

Виджет CheckButton — это не что иное, как ToggleButton, стилизованный под флажок и метку. Он наследует все свойства и методы из класса ToggleButton. В отличие от ToggleButton, где заголовок находится на лицевой стороне кнопки, CheckButton отображает небольшой квадрат, который можно проверить и имеет метку справа.

Конструктор, методы и сигналы, связанные с gtk.CheckButton, в точности совпадают с gtk.ToggleButton.

пример

В следующем примере демонстрируется использование виджета CheckButton. Две CheckButtons и метка помещаются в VBox. Переключаемый сигнал первого CheckButton подключается к методу on_checked (), который устанавливает состояние второй кнопки в значение True, если состояние первой кнопки равно false, и наоборот.

Соблюдайте код —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Check Button")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)

      vbox = gtk.VBox()
      self.btn1 = gtk.CheckButton("Button 1")
      self.btn1.connect("toggled", self.on_checked)
      self.btn2 = gtk.CheckButton("Button 2")
      self.btn2.connect("toggled", self.on_checked)
      self.lbl = gtk.Label()
		
      vbox.add(self.btn1)
      vbox.add(self.btn2)
      vbox.add(self.lbl)
		
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def on_checked(self, widget, data = None):
      state = "Button1 : "+str(self.btn1.get_active())+" 
         Button2 : "+str(self.btn2.get_active())
      self.lbl.set_text(state)
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Кнопка проверки

PyGTK — Класс RadioButton

Один виджет RadioButton предлагает функциональность, аналогичную CheckButton. Однако, когда в одном контейнере присутствует несколько переключателей, пользователю предоставляется взаимоисключающий выбор, чтобы выбрать один из доступных вариантов. Если все переключатели в контейнере принадлежат к одной и той же группе, то при выборе одной из них другие автоматически отменяются.

Ниже приведен конструктор класса gtk.RadioButton:

gtk.RadioButton(group = None, Label = None, unerline = None)

Чтобы создать группу кнопок, укажите group = None для первой кнопки-переключателя, а для последующих опций укажите объект первой кнопки как группу.

Как и в случае ToggleButton и CheckButton, RadioButton также испускает переключенный сигнал . В приведенном ниже примере три объекта виджета gtk.RadioButton помещаются в VBox. Все они подключены к функции обратного вызова on_selected () для обработки переключенного сигнала.

Функция обратного вызова идентифицирует метку исходного виджета RadioButton и отображает ее на метке, помещенной в VBox.

пример

Соблюдайте следующий код —

import gtk

class PyApp(gtk.Window):

   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Radio Button")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      vbox = gtk.VBox()
      
      btn1 = gtk.RadioButton(None, "Button 1")
      btn1.connect("toggled", self.on_selected)
      btn2 = gtk.RadioButton(btn1,"Button 2")
      btn2.connect("toggled", self.on_selected)
      btn3 = gtk.RadioButton(btn1,"Button 3")
      btn3.connect("toggled", self.on_selected)
      
      self.lbl = gtk.Label()
      vbox.add(btn1)
      vbox.add(btn2)
      vbox.add(btn3)
      vbox.add(self.lbl)
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
   
   def on_selected(self, widget, data=None):
      self.lbl.set_text(widget.get_label()+" is selected")
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Переключатель

PyGTK — MenuBar, Menu и MenuItem

Горизонтальная полоса чуть ниже строки заголовка верхнего уровня gtk. Окно зарезервировано для отображения серии меню. Это объект класса gtk.MenuBar в PyGTK API.

Объект класса gtk.Menu добавляется в строку меню. Он также используется для создания контекстного меню и всплывающего меню. Каждое меню может содержать один или несколько виджетов gtk.MenuItem. Некоторые из них могут быть подменю и каскадными кнопками MenuItem.

Gtk.MenuBar является подклассом класса gtk.MenuShell. У него есть простой конструктор по умолчанию —

gtk.MenuBar()

Чтобы добавить меню в MenuBar, используется метод append () класса MenuBar.

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

Например, следующий код используется для настройки меню «Файл» —

menu1 = gtk.Menu()
file = gtk.MenuItem("_File")
file.set_submenu(menu1)

Теперь в меню можно добавить один или несколько виджетов класса MenuItem.

item1 = gtk.MenuItem("New")
item2 = gtk.MenuItem("Open")

Эти элементы меню добавляются в виджет «Меню», а объект меню, в свою очередь, добавляется в строку меню.

menu1.append(item1)
menu1.append(item2)
mb.append(menu1)

Набор инструментов PyGTK предлагает множество типов виджетов MenuItem. ImageMenuItem — это пункт меню, с которым связано изображение. Вы можете использовать любое из стоковых изображений с помощью параметра Stock ID или назначить любое другое изображение методом set_image ().

Например, пункт меню «Новый» с изображением создается следующим образом:

new = gtk.ImageMenuItem(gtk.STOCK_NEW)
menu1.append(new)

Точно так же можно также добавить CheckMenuItem, используя следующий код —

chk = gtk.CheckMenuItem("Checkable")
menu1.append(chk)

Группа радио пунктов также может быть добавлена ​​с помощью этого кода —

radio1 = gtk.RadioMenuItem(None,"Radio1")
radio2 = gtk.RadioMenuItem(radio1, "Radio2")
menu1.append(radio1)
menu1.append(radio2)

Иногда вам может понадобиться добавить разделительную строку между пунктами меню. Для этой цели также доступен SeparatorMenuItem .

sep = gtk.SeparatorMenuItem()
menu1.append(sep)

Вы также можете назначить сочетания клавиш для пунктов меню. У PyGTK есть ускорители. Начните с создания группы акселераторов и прикрепите ее к окну верхнего уровня.

acgroup = gtk.AccelGroup()
self.add_accel_group(acgroup)

Чтобы назначить ярлык, используйте функцию add_accelerator () со следующим прототипом —

Item1.add_accelerator(signal, group, key, modifier, flags)

Ниже приведены некоторые из предопределенных модификаторов:

  • SHIFT_MASK
  • LOCK_MASK
  • CONTROL_MASK
  • BUTTON1_MASK
  • BUTTON1_MASK

Чтобы назначить сочетание клавиш Ctrl + N для пункта «Новое меню», используйте следующий синтаксис:

new = gtk.ImageMenuItem(gtk.STOCK_NEW,acgroup)
new.add_accelerator("activate", acgroup, ord('N'), 
   gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)

пример

Следующий пример демонстрирует функции, обсужденные выше —

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      
      super(PyApp, self).__init__()
      self.set_title("Menu Demo")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      mb = gtk.MenuBar()
      
	  menu1 = gtk.Menu()
      file = gtk.MenuItem("_File")
      file.set_submenu(menu1)
      acgroup = gtk.AccelGroup()
      self.add_accel_group(acgroup)
      new = gtk.ImageMenuItem(gtk.STOCK_NEW,acgroup)
      new.add_accelerator("activate", acgroup, ord('N'), 
         gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
      
      menu1.append(new)
      open = gtk.ImageMenuItem(gtk.STOCK_OPEN)
      
      menu1.append(open)
      chk = gtk.CheckMenuItem("Checkable")
      
      menu1.append(chk)
      radio1 = gtk.RadioMenuItem(None,"Radio1")
      radio2 = gtk.RadioMenuItem(radio1, "Radio2")
      
      menu1.append(radio1)
      menu1.append(radio2)
      sep = gtk.SeparatorMenuItem()
      
      menu1.append(sep)
      exit = gtk.ImageMenuItem(gtk.STOCK_QUIT)
      
      menu1.append(exit)
      menu2 = gtk.Menu()
      edit = gtk.MenuItem("_Edit")
      edit.set_submenu(menu2)
      copy = gtk.ImageMenuItem(gtk.STOCK_COPY)
      
      menu2.append(copy)
      cut = gtk.ImageMenuItem(gtk.STOCK_CUT)
      
      menu2.append(cut)
      paste = gtk.ImageMenuItem(gtk.STOCK_PASTE)
      
      menu2.append(paste)
      mb.append(file)
      mb.append(edit)
      vbox = gtk.VBox(False, 2)
      vbox.pack_start(mb, False, False, 0)
      
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код выдаст следующий вывод:

Демо меню

PyGTK — класс панели инструментов

Класс панели инструментов наследуется от класса gtk.Container. Он держит и управляет набором кнопок и других виджетов. Одна или несколько горизонтальных полос кнопок обычно видны чуть ниже строки меню в окне верхнего уровня. Панель инструментов также можно поместить в съемное окно под названием HandleBox. По умолчанию кнопки в виджете gtk.Toolbar расположены горизонтально. Вертикальную панель инструментов можно настроить, установив свойство ориентации в gtk.ORIENTATION_VERTICAL .

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

gtk.TOOLBAR_ICONS Эти кнопки отображают только значки на панели инструментов.
gtk.TOOLBAR_TEXT Эти кнопки отображают только текстовые метки на панели инструментов.
gtk.TOOLBAR_BOTH Эти кнопки отображают текст и значки на панели инструментов.
gtk.TOOLBAR_BOTH_HORIZ Эти кнопки отображают значки и текст рядом друг с другом, а не вертикально.

Виджет панели инструментов настраивается с помощью следующего конструктора —

bar = gtk.Toolbar()

Составляющие панели инструментов являются экземплярами gtk.ToolItem. Элементы могут быть ToolButton, RadioToolButton, ToggleToolButton или SeparatorToolItem. Чтобы назначить значок объекту ToolItem, можно использовать изображения с предопределенным идентификатором stock_ID или назначить пользовательское изображение методом set_image ().

Следующие примеры показывают, как создавать различные ToolItems —

ToolButton

newbtn = gtk.ToolButton(gtk.STOCK_NEW)

RadioToolButton

rb1 = gtk.RadioToolButton(None,gtk.STOCK_JUSTIFY_LEFT) 
rb2 = gtk.RadioToolButton(rb1,gtk.STOCK_JUSTIFY_RIGHT)

Обратите внимание, что несколько переключателей находятся в одной группе.

SeparatorToolItem

sep = gtk.SeparatorToolItem()

Эти элементы помещаются в панель инструментов путем вызова метода вставки .

gtk.Toolbar.insert(item, index)

Например,

bar.insert(new,0)

Вы также можете назначить всплывающую подсказку для ToolButton с помощью метода set_tooltip_text (). Например, новая всплывающая подсказка назначается новой панели инструментов.

newbtn.set_tooltip_text("New")

пример

Следующий код показывает окно верхнего уровня с панелью инструментов, настроенной на то, чтобы содержать обычный инструментальный элемент, радиоэлементы и разделительный элемент.

import gtk

class PyApp(gtk.Window):

   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Toolbar Demo")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      toolbar = gtk.Toolbar()
      toolbar.set_style(gtk.TOOLBAR_ICONS)
      toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL)
      
      newbtn = gtk.ToolButton(gtk.STOCK_NEW)
      newbtn.set_tooltip_text("New")
      openbtn = gtk.ToolButton(gtk.STOCK_OPEN)
      savebtn = gtk.ToolButton(gtk.STOCK_SAVE)
      sep = gtk.SeparatorToolItem()
      
      rb1 = gtk.RadioToolButton(None,gtk.STOCK_JUSTIFY_LEFT)
      53
      rb2 = gtk.RadioToolButton(rb1,gtk.STOCK_JUSTIFY_RIGHT)
      
      prv = gtk.ToggleToolButton(gtk.STOCK_PRINT_PREVIEW)
      quitbtn = gtk.ToolButton(gtk.STOCK_QUIT)
      
      toolbar.insert(newbtn, 0)
      toolbar.insert(openbtn, 1)
      toolbar.insert(savebtn, 2)
      toolbar.insert(sep, 3)
      toolbar.insert(rb1,4)
      toolbar.insert(rb2,5)
      toolbar.insert(prv,6)
      toolbar.insert(quitbtn, 7)
      
      quitbtn.connect("clicked", gtk.main_quit)
      vbox = gtk.VBox(False, 2)
      vbox.pack_start(toolbar, False, False, 0)
      
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
   
   def on_checked(self, widget, data = None):
      state = "Button1 : "+str(self.btn1.get_active())+" 
         Button2 : "+str(self.btn2.get_active())
      self.lbl.set_text(state)
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Панель инструментов Демо

PyGTK — Класс настройки

Некоторые виджеты в наборе инструментов PyGTK таковы, что их свойства могут быть изменены пользователем в указанном диапазоне с помощью мыши или клавиатуры. Виджет, такой как Viewport, используется для отображения некоторой настраиваемой части больших данных, например, многострочного текста в элементе управления TextView.

PyGTK использует объект gtk.Adjustment, который будет использоваться в связи с такими виджетами, так что пользовательские настройки передаются в некоторую функцию обратного вызова для обработки. Корректирующий объект содержит нижнюю и верхнюю границы настраиваемого значения и его параметры шага приращения. При изменении параметров объекта настройки он издает сигналы измененного или значения.

Ниже приведен конструктор класса gtk.Adjustment —

gtk.Adjustment(value = 0, lower = 0, upper = 0, step_incr = 0, 
   page_incr = 0, page_size = 0)

Значение каждого из атрибутов в конструкторе следующее:

значение Начальное значение
ниже Минимальное значение
верхний Максимальное значение
step_incr Шаг шага
page_incr Приращение страницы
размер страницы Размеры страницы

Следующие сигналы испускаются объектом регулировки —

Изменено Это излучается, когда один (или более) из атрибутов уравнивания (кроме атрибута значения) изменился.
Значение, изменено Это излучается, когда атрибут корректирующего значения изменился.

Как упоминалось выше, объект Adjustment не является физическим виджетом. Скорее, он используется в сочетании с другими виджетами, использующими его атрибуты. Виджеты Range используются вместе с объектом Adjustment.

PyGTK — Range Range

Этот класс действует как базовый класс для виджетов, который позволяет пользователю регулировать значение числового параметра между нижней и верхней границами. Виджеты масштабирования (gtk.Hscale и gtk.Vscale) и виджеты полосы прокрутки (gtk.HScrollbar и gtk.VScrollbar) получают функциональные возможности из класса Range. Эти виджеты Range работают совместно с объектом Adjustment.

Следующие важные функции класса gtk.Range реализуются виджетами Scale и Scrollbar —

  • set_update_policy () — устанавливает значение свойства update-policy. Политика имеет следующие значения —

set_update_policy () — устанавливает значение свойства update-policy. Политика имеет следующие значения —

gtk.UPDATE_CONTINUOUS каждый раз, когда перемещается ползунок диапазона, значение диапазона будет изменяться, и будет выдан сигнал «value_changed».
gtk.UPDATE_DELAYED значение будет обновлено после короткого времени ожидания, когда движение ползунка не произойдет, поэтому изменения значения будут немного задерживаться, а не постоянно обновляться.
gtk.UPDATE_DISCONTINUOUS значение будет обновлено только тогда, когда пользователь отпустит кнопку и завершит операцию перетаскивания ползунка.
  • set_adjustment () — это устанавливает свойство «регулировки». Корректирующий объект используется в качестве модели для объекта Range.

  • set_increments () — устанавливает шаг и размеры страницы для диапазона.

  • set_range () — устанавливает минимальное и максимальное допустимые значения для виджета Range

  • set_value () — устанавливает текущее значение диапазона на указанное значение.

set_adjustment () — это устанавливает свойство «регулировки». Корректирующий объект используется в качестве модели для объекта Range.

set_increments () — устанавливает шаг и размеры страницы для диапазона.

set_range () — устанавливает минимальное и максимальное допустимые значения для виджета Range

set_value () — устанавливает текущее значение диапазона на указанное значение.

Классы виджетов масштаба — (HScale и VScale) являются производными от класса gtk.Range.

PyGTK — Scale Class

Этот класс действует как абстрактный базовый класс для виджетов HScale и VScale. Эти виджеты работают как ползунок и выбирают числовое значение.

Следующие методы этого абстрактного класса реализуются классом HScale и классом VScale:

  • set_digits () — устанавливает количество десятичных разрядов, которые будут использоваться для отображения мгновенного значения виджета.

  • set_draw_value () — установите значение True, текущее значение будет отображаться рядом с ползунком.

  • set_value_pos () — это позиция, в которой отображаются значения. Это может быть gtk.POS_LEFT, gtk.POS_RIGHT, gtk.POS_TOP или gtk.POS_BOTTOM.

set_digits () — устанавливает количество десятичных разрядов, которые будут использоваться для отображения мгновенного значения виджета.

set_draw_value () — установите значение True, текущее значение будет отображаться рядом с ползунком.

set_value_pos () — это позиция, в которой отображаются значения. Это может быть gtk.POS_LEFT, gtk.POS_RIGHT, gtk.POS_TOP или gtk.POS_BOTTOM.

Объект класса gtk.HScale предоставляет горизонтальный слайдер, тогда как объект класса gtk.VScale предоставляет вертикальный слайдер. Оба класса имеют одинаковые конструкторы —

gtk.HScale(Adjustment = None)
gtk.VScale(Adjustment = None)

Корректирующий объект содержит множество атрибутов, которые обеспечивают доступ к значению и границам.

PyGTK — класс полосы прокрутки

Этот класс является абстрактным базовым классом для виджетов gtk.Hscrollbar и gtk.Vscrollbar. Оба связаны с объектом корректировки. Положение большого пальца полосы прокрутки контролируется настройками прокрутки. Атрибуты объекта настройки используются следующим образом:

ниже Минимальное значение области прокрутки
верхний Максимальное значение области прокрутки
значение Представляет положение полосы прокрутки, которая должна быть между нижней и верхней
размер страницы Представляет размер видимой прокручиваемой области
step_increment Расстояние для прокрутки при нажатии на маленькие шаговые стрелки
page_increment Расстояние для прокрутки при нажатии клавиш Page Up или Page Down

Следующая программа показывает виджет HScale и HScrollbar, помещенный в VBox, добавленный в окно верхнего уровня. Каждый из них связан с объектом корректировки.

adj1 = gtk.Adjustment(0, 0, 101, 0.1, 1, 1)
self.adj2 = gtk.Adjustment(10,0,101,5,1,1)

Виджет gtk.HScale — это слайдер, прикрепленный с помощью adj1. Его политика обновления, номер и позиция значения чертежа устанавливаются следующим образом:

scale1 = gtk.HScale(adj1)
scale1.set_update_policy(gtk.UPDATE_CONTINUOUS)
scale1.set_digits(1)
scale1.set_value_pos(gtk.POS_TOP)
scale1.set_draw_value(True)

gtk.HScrollbar предоставляет горизонтальную полосу прокрутки. Это связано с объектом adj2. Его политика обновлений тоже установлена ​​на НЕПРЕРЫВНЫЙ.

self.bar1 = gtk.HScrollbar(self.adj2)
self.bar1.set_update_policy(gtk.UPDATE_CONTINUOUS)

Чтобы отобразить мгновенное значение полосы прокрутки, сигнал «значение изменено» объекта настройки — adj2 подключен к функции обратного вызова on_scrolled () . Функция извлекает свойство value объекта уравнивания и отображает его на метке под полосой прокрутки.

self.adj2.connect("value_changed", self.on_scrolled)
   def on_scrolled(self, widget, data = None):
   self.lbl2.set_text("HScrollbar value: "+str(int(self.adj2.value)))

пример

Соблюдайте следующий код —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Range widgets Demo")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      adj1 = gtk.Adjustment(0.0, 0.0, 101.0, 0.1, 1.0, 1.0)
      self.adj2 = gtk.Adjustment(10,0,101,5,1,1)
      
      scale1 = gtk.HScale(adj1)
      scale1.set_update_policy(gtk.UPDATE_CONTINUOUS)
      scale1.set_digits(1)
      scale1.set_value_pos(gtk.POS_TOP)
      scale1.set_draw_value(True)
      
      vb = gtk.VBox()
      vb.add(scale1)
      lbl1 = gtk.Label("HScale")
      
      vb.add(lbl1)
      self.bar1 = gtk.HScrollbar(self.adj2)
      self.bar1.set_update_policy(gtk.UPDATE_CONTINUOUS)
      vb.add(self.bar1)
      self.lbl2 = gtk.Label("HScrollbar value: ")
      
      vb.add(self.lbl2)
      self.adj2.connect("value_changed", self.on_scrolled)
      self.add(vb)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
   
   def on_scrolled(self, widget, data=None):
      self.lbl2.set_text("HScrollbar value: "+str(int(self.adj2.value)))
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Range Widgets Демо

PyGTK — Диалог Класс

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

Виджет Dialog библиотеки PyGTK представляет собой окно, разделенное по вертикали. В его верхнем разделе находится gtk.VBox, в который упакованы виджеты Label или Entry. Нижний раздел называется action_area, в который помещается одна или несколько кнопок. Две области разделены gtk.HSeparator.

Класс gtk.Dialog имеет следующий конструктор —

dlg = gtk.Dialog (Title = None, parent = None, flags = 0, buttons = None)

Куда,

  • Заголовок — текст, отображаемый в строке заголовка виджета «Диалог».

  • Родитель — ссылка на окно верхнего уровня, из которого открывается диалоговое окно.

  • Флаг — определяет константы, управляющие работой Диалога. Определенные константы —

Заголовок — текст, отображаемый в строке заголовка виджета «Диалог».

Родитель — ссылка на окно верхнего уровня, из которого открывается диалоговое окно.

Флаг — определяет константы, управляющие работой Диалога. Определенные константы —

gtk.DIALOG_MODAL Если установлено, диалог захватывает все события клавиатуры
gtk.DIALOG_DESTROY_WITH_PARENT Если установлено, диалог уничтожается, когда его родитель.
gtk.DIALOG_NO_SEPARATOR Если установлено, над кнопками нет разделительной полосы.

Что такое кнопка?

Кнопка — это объект кортежа, содержащий пары gtk.Button с биржевым идентификатором (или текстом) и идентификаторами его ответов.

Идентификатор ответа может быть любым числом или одной из предопределенных констант идентификатора ответа.

  • gtk.RESPONSE_NONE
  • gtk.RESPONSE_REJECT
  • gtk.RESPONSE_ACCEPT
  • gtk.RESPONSE_DELETE_EVENT
  • gtk.RESPONSE_OK
  • gtk.RESPONSE_CANCEL
  • gtk.RESPONSE_CLOSE
  • gtk.RESPONSE_YES
  • gtk.RESPONSE_NO
  • gtk.RESPONSE_APPLY
  • gtk.RESPONSE_HELP

Важные методы класса gtk.Dialog приведены ниже —

  • add_button () — добавляет кнопку с текстом, заданным button_text (или кнопкой акции, если button_text является идентификатором акции) в action_area.

  • response () — испускает сигнал «response» со значением, указанным в response_id

  • run () — отображает диалоговое окно и возвращает response_id, когда delete_event получен.

  • set_default_response () — Устанавливает последний виджет в области действия диалога с указанным response_id в качестве виджета по умолчанию для диалога.

add_button () — добавляет кнопку с текстом, заданным button_text (или кнопкой акции, если button_text является идентификатором акции) в action_area.

response () — испускает сигнал «response» со значением, указанным в response_id

run () — отображает диалоговое окно и возвращает response_id, когда delete_event получен.

set_default_response () — Устанавливает последний виджет в области действия диалога с указанным response_id в качестве виджета по умолчанию для диалога.

Виджет gtk.Dialog испускает следующие сигналы —

близко Это испускается, когда диалог закрыт.
отклик Он выдается, когда активирован виджет action_area (кнопка «нажата»), диалоговое окно получает сообщение delete_event или приложение вызывает метод response ().

Две кнопки в action_area виджета Dialog используют идентификаторы акций gtk.STOCK.CANCEL и gtk.STOCK_OK. Они связаны с идентификаторами ответов GTK. RESPONSE_REJECT и GTK. RESPONSE_ACCEPT соответственно. Диалог закрывается при нажатии любой кнопки. Методы run () возвращают соответствующий ID ответа, который можно использовать для дальнейшей обработки.

Следующий код отображает верхний уровень gtk.Window с кнопкой в ​​нем. При нажатии кнопки появляется диалог с меткой и двумя кнопками.

пример

Соблюдайте следующий код —

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Dialog Demo")
      self.set_default_size(250, 200)
      fixed = gtk.Fixed()
      btn = gtk.Button("Show")
      btn.connect("clicked",self.show_sialog)
      fixed.put(btn,100,100)
      self.add(fixed)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
      
   def show_sialog(self, widget, data=None):
      dialog = gtk.Dialog("My dialog",
         self,
         gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
         (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
         gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
      label = gtk.Label("Simple dialog")
      dialog.vbox.add(label)
      label.show()
      res = dialog.run()
      print res
      dialog.destroy()
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код производит следующий вывод —

Диалог Демо

Предварительно настроенные диалоговые виджеты

PyGTK API имеет несколько предварительно настроенных виджетов Dialog —

  • MessageDialog
  • AboutDialog
  • ColorSelectionDialog
  • FontSelectionDialog
  • FileChooserDialog

Чтобы продемонстрировать функционирование вышеупомянутого стандартного диалога в PyGTK, меню с пунктом меню, каждый из которых вызывает диалог при нажатии, помещается в окно gtk.Window в следующей программе. Перечислены функции обратного вызова, реагирующие на активацию сигнала каждого пункта меню. Вы также можете понять объяснение, предоставленное для каждого типа диалогового виджета.

пример

Соблюдайте следующий код —

import gtk, pango

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Dialog Boxes")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      mb = gtk.MenuBar()
      menu1 = gtk.Menu()
      file = gtk.MenuItem("_File")
      file.set_submenu(menu1)
      msg = gtk.MenuItem("MessageDialog")
      
      menu1.append(msg)
      abt = gtk.MenuItem("AboutDialog")
      menu1.append(abt)
      colo = gtk.MenuItem("colorDialog")
      menu1.append(colo)
      font = gtk.MenuItem("FontSelectionDialog")
      menu1.append(font)
      fl = gtk.MenuItem("FileChooserDialog")
      menu1.append(fl)
      mb.append(file)
      
      vbox = gtk.VBox(False, 2)
      vbox.pack_start(mb, False, False, 0)
      self.add(vbox)
      self.text = gtk.Label("TutorialsPoint")
      vbox.pack_start(self.text, True, True, 0)
      msg.connect("activate",self.on_msgdlg)
      abt.connect("activate",self.on_abtdlg)
      font.connect("activate",self.on_fntdlg)
      colo.connect("activate",self.on_color)
      
      fl.connect("activate", self.on_file)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
   def on_msgdlg(self, widget):
      #MessageDialog usage code
   def on_abtdlg(self, widget):
      #AboutDialog usage code
   def on_fntdlg(self,widget):
      #FontSelectionDialog usage code
   def on_color(self, widget):
      #ColorChooserDialog usage cde
   Def on_file(self, widget):
      #FileChooserDialog usage code
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Диалоговые окна

PyGTK — класс MessageDialog

Виджет Messagedialog — это диалоговое окно, сконфигурированное для отображения изображения, представляющего тип сообщения, то есть ошибку, вопрос или некоторый информационный текст. Объект MessageDialog объявляется с помощью следующего конструктора —

gtk.MessageDialog(parent = None, flags = 0, type = gtk.MESSAGE_INFO, 
   buttons = gtk.BUTTONS_NONE, message_format = None)

Следующие предопределенные типы сообщений используются для настройки диалога сообщений:

gtk.MESSAGE_INFO Это информационное сообщение
gtk.MESSAGE_WARNING Это нефатальное предупреждение
gtk.MESSAGE_QUESTION Этот вопрос требует выбора
gtk.MESSAGE_ERROR Это фатальное сообщение об ошибке

Набор предопределенных наборов кнопок также доступен для использования.

gtk.BUTTONS_NONE Нет кнопок вообще
gtk.BUTTONS_OK Это кнопка ОК
gtk.BUTTONS_CLOSE Это кнопка Закрыть
gtk.BUTTONS_CANCEL Это кнопка Отмена
gtk.BUTTONS_YES_NO Это кнопки Да и Нет
gtk.BUTTONS_OK_CANCEL Это кнопки ОК и Отмена

Когда элемент меню MessageBox активирован, вызывается следующая функция обратного вызова, и в качестве вывода появляется окно сообщения.

def on_msgdlg(self, widget):
   md = gtk.MessageDialog(self,
      gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR,
      gtk.BUTTONS_CLOSE, "Error message")
   md.run()

Вышеуказанная функция сгенерирует следующий вывод —

Сообщение об ошибке

PyGTK — AboutDialog Class

Простой вид отображения информации о программе, такой как ее логотип, название, авторские права, веб-сайт и лицензия, предлагается с помощью виджета gtk.AboutDialog. Диалог о программе обычно открывается, когда пользователь выбирает пункт « О программе» в меню « Справка» . Все части диалога являются необязательными.

Диалог О программе может содержать URL-адреса и адреса электронной почты. gtk.AboutDialog предлагает глобальные хуки, когда пользователь нажимает URL-адреса и идентификатор электронной почты

Ниже приведен конструктор класса gtk.AboutDialog:

dlg = gtk.AboutDialog()

Следующие методы используются для настройки диалога «О программе».

  • set_program_name () — устанавливает имя, отображаемое в диалоге About . по умолчанию используется application_name ().

  • set_version () — это устанавливает свойство «версия»

  • set_copyright () — устанавливает «авторское право». Если Нет, уведомление об авторских правах скрыто.

  • set_license () — это устанавливает «лицензию». Если Нет, кнопка лицензии скрыта.

  • set_website () — устанавливает свойство «website» для строки, которая должна быть действительным URL.

  • set_author () — устанавливает свойство «авторы» для списка имен авторов, отображаемых на вкладке авторов диалога дополнительных кредитов.

  • set_logo () — устанавливает свойство «logo» для объекта Pixbuf. Если Нет, будет использоваться набор значков окна по умолчанию.

set_program_name () — устанавливает имя, отображаемое в диалоге About . по умолчанию используется application_name ().

set_version () — это устанавливает свойство «версия»

set_copyright () — устанавливает «авторское право». Если Нет, уведомление об авторских правах скрыто.

set_license () — это устанавливает «лицензию». Если Нет, кнопка лицензии скрыта.

set_website () — устанавливает свойство «website» для строки, которая должна быть действительным URL.

set_author () — устанавливает свойство «авторы» для списка имен авторов, отображаемых на вкладке авторов диалога дополнительных кредитов.

set_logo () — устанавливает свойство «logo» для объекта Pixbuf. Если Нет, будет использоваться набор значков окна по умолчанию.

При нажатии кнопки меню AboutDialog вызывается следующая функция обратного вызова. Эта функция генерирует диалог About —

def on_abtdlg(self, widget):
   
   about = gtk.AboutDialog()
   about.set_program_name("PyGTK Dialog")
   about.set_version("0.1")
   about.set_authors("M.V.Lathkar")
   about.set_copyright("(c) TutorialsPoint")
   about.set_comments("About Dialog example")
   about.set_website("http://www.tutorialspoint.com")
   
   about.run()
   about.destroy()

Вышеуказанная функция генерирует следующий вывод —

О PyGTK Диалог

PyGTK — Диалог выбора шрифта

Виджет gtk.FontSelection позволяет пользователям выбирать и применять шрифт с определенным именем, размером и стилем. Диалог имеет окно предварительного просмотра, содержащее некоторый текст, который будет отображаться в выбранном описании шрифта, и две кнопки ОТМЕНА и ОК.

PyGTK API содержит модуль Pango, который определяет классы и функциональные возможности, необходимые для визуализации высококачественного интернационализированного текста. Обработка шрифтов и текста в gtk поддерживается Pango. Объект pango.Font представляет шрифт независимым от системы способом. Объект pango.FontDescription содержит характеристики шрифта.

gtk.FontSelectionDialog возвращает объект pango.Font. Чтобы применить выбранный шрифт, fontmetrics выбирается путем получения из него объекта pango.FontDescription.

Ниже приведен конструктор класса FontSelectionDialog:

dlg = gtk.FontSelectionDialog(title)

Ниже приведены некоторые часто используемые методы этого класса.

  • get_font_name () — возвращает строку, содержащую текущее имя шрифта или None, если имя шрифта не выбрано.

  • set_font_name () — устанавливает текущий шрифт

  • set_preview_text () — устанавливает текст в области предварительного просмотра

get_font_name () — возвращает строку, содержащую текущее имя шрифта или None, если имя шрифта не выбрано.

set_font_name () — устанавливает текущий шрифт

set_preview_text () — устанавливает текст в области предварительного просмотра

Выбранный шрифт применяется к тексту в виджете с помощью метода modify_font ().

Когда пункт меню FontSelectionDialog активирован, вызывается следующая функция обратного вызова:

def on_abtdlg(self, widget):
   about = gtk.AboutDialog()
   about.set_program_name("PyGTK Dialog")
   about.set_version("0.1")
   about.set_authors("M.V.Lathkar")
   about.set_copyright("(c) TutorialsPoint")
   about.set_comments("About Dialog example")
   about.set_website("http://www.tutorialspoint.com")
   about.run()
   about.destroy()

Выбранный шрифт применяется к тексту метки, помещенному в окно верхнего уровня.

Выберите шрифт

Следующий вывод —

Диалоговые окна шрифтов

PyGTK — Диалог выбора цвета

Это предварительно настроенный диалог в PyGTK API, который позволяет пользователю выбирать и применять цвет. Он внутренне встраивает виджет gtk.ColorSelection.

Виджет gtk.ColorScelection представляет колесо цвета и поля ввода для параметров цвета, таких как HSV и RGB. Новый цвет можно выбрать, управляя цветовым кругом или вводя параметры цвета. Его get_current_color полезен для дальнейшей обработки.

Ниже приведен прототип конструктора класса gtk.ColorSelectionDialog.

dlg = gtk.ColorSelectionDialog(title)

Текущий выбранный цвет получается из атрибута colorsel. Выбранный цвет применяется к виджету с помощью методов modify_fg () или modify_bg ().

Когда кнопка меню ColorDialog активирована, выполняется следующая функция обратного вызова:

def on_color(self, widget):
   dlg = gtk.ColorSelectionDialog("Select color")
   col = dlg.run()
   sel = dlg.colorsel.get_current_color()
   self.text.modify_fg(gtk.STATE_NORMAL, sel)

Выбранный цвет применяется к тексту в виджете метки в окне —

Выберите Цвет

Следующий вывод —

Цветные диалоговые окна

PyGTK — диалог выбора файлов

Этот диалог полезен, чтобы позволить пользователю выбрать местоположение и имя файла, который должен быть открыт или сохранен. Он встраивает FileChooserWidget и предоставляет кнопки OK и CANCEL в action_area.

Ниже приведен конструктор класса gtk.FileChooserDialog:

Dlg=gtk.FileChooserDialog (title = None, parent = None, 
   action = gtk.FILE_CHOOSER_ACTION_OPEN,  buttons = None, backend = None)

Параметры —

заглавие Это заголовок диалога
родитель Переходный родительский элемент диалога, или Нет
действие Режим открытия или сохранения для диалога
кнопки Это кортеж, содержащий пары идентификаторов меток-ответов кнопок или None
бэкенд Имя конкретной используемой файловой системы.

Ниже приведены режимы действий —

  • gtk.FILE_CHOOSER_ACTION_OPEN
  • gtk.FILE_CHOOSER_ACTION_SAVE
  • gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER
  • gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER

Если необходимо ограничить типы файлов, доступных для отображения, объект gtk.FileFilter можно применить с помощью метода add_filter ().

Если нажата кнопка меню FileChooserDialog, запускается следующая функция обратного вызова.

def on_file(self, widget):
   dlg = gtk.FileChooserDialog("Open..", None, gtk.FILE_CHOOSER_ACTION_OPEN,
      (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
   response = dlg.run()
   self.text.set_text(dlg.get_filename())
   dlg.destroy()

Файл выбирается из диалогового окна —

File Chooser Open

Выбранный файл отображается на ярлыке верхнего уровня gtk.Window —

Диалоговые окна файлов

PyGTK — класс ноутбуков

Блокнот для ноутбука — это контейнер с вкладками. Каждая вкладка в этом контейнере содержит отдельную страницу, и страницы отображаются в наложенном виде. Любая нужная страница становится видимой, нажав на ярлык вкладки. Метки можно настроить так, чтобы они отображались сверху или снизу или слева или справа. Контейнерный виджет с размещенными в нем другими виджетами или один виджет размещается под каждой страницей.

Если отображаемые данные слишком велики в одном представлении, они группируются на разных страницах, каждая из которых размещается на одной вкладке виджета «Блокнот». Этот тип контроля очень широко используется. Интернет-браузер, например, использует этот дисплей с вкладками для отображения разных страниц на разных вкладках.

Ниже приведен конструктор класса gtk.Notebook —

gtk.Notebook()

Ниже приведены часто используемые методы класса gtk.Notebook.

  • append_page (child, label) — добавляет страницу в блокнот, содержащую виджет, указанный tab_label в качестве метки на вкладке. Если tab_label может быть None, чтобы использовать метку по умолчанию.

  • insert_page (child, label, position) — вставляет страницу в блокнот в месте, указанном позицией.

  • remove_page (index) — это удаляет страницу по указанному индексу.

  • get_current_page () — возвращает индекс страницы текущей страницы.

  • set_current_page (index) — переключается на номер страницы, указанный индексом.

  • set_show_tabs () — если false, вкладки не будут видны. Это правда по умолчанию.

  • set_tab_pos (pos) — устанавливает край, на котором отображаются вкладки для переключения страниц в блокноте. Предопределенные константы —

    • gtk.POS_LEFT

    • gtk.POS_RIGHT

    • gtk.POS_TOP

    • gtk.POS_BOTTOM

  • set_tab_label_text (child, text) — это создает новую метку с указанным текстом и устанавливает ее в качестве метки вкладки для страницы, содержащей child.

append_page (child, label) — добавляет страницу в блокнот, содержащую виджет, указанный tab_label в качестве метки на вкладке. Если tab_label может быть None, чтобы использовать метку по умолчанию.

insert_page (child, label, position) — вставляет страницу в блокнот в месте, указанном позицией.

remove_page (index) — это удаляет страницу по указанному индексу.

get_current_page () — возвращает индекс страницы текущей страницы.

set_current_page (index) — переключается на номер страницы, указанный индексом.

set_show_tabs () — если false, вкладки не будут видны. Это правда по умолчанию.

set_tab_pos (pos) — устанавливает край, на котором отображаются вкладки для переключения страниц в блокноте. Предопределенные константы —

gtk.POS_LEFT

gtk.POS_RIGHT

gtk.POS_TOP

gtk.POS_BOTTOM

set_tab_label_text (child, text) — это создает новую метку с указанным текстом и устанавливает ее в качестве метки вкладки для страницы, содержащей child.

Виджет gtk.Notebook испускает следующие сигналы:

изменение тока страницы Выдается, когда выдается запрос на перемотку страницы вперед или назад.
фокус-вкладка Это излучается, когда фокус изменяется с помощью вкладок.
страница добавленной Это излучается при добавлении страницы в блокнот.
страниц удалены Это излучается после удаления страницы из записной книжки.
выберите-страницы Это излучается при выборе новой дочерней страницы.
Переключатель страниц Это излучается при изменении страницы записной книжки.

пример

В следующем примере книга gtk.Notebook с тремя страницами помещается в верхний уровень gtk.Window. Первая страница содержит VBox, в котором упакованы метка и поле ввода. На второй странице, помеченной как «квалификация», есть HButtonBox, в который добавлены три взаимоисключающих виджета RadioButton. Третья страница имеет объект TextView. Метки страницы отображаются сверху.

Соблюдайте код —

import gtk
class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Notebook Demo")
      self.set_default_size(250, 200)
		
      nb = gtk.Notebook()
      nb.set_tab_pos(gtk.POS_TOP)
      vbox = gtk.VBox(False, 5)
		
      vb = gtk.VBox()
      hbox = gtk.HBox(True, 3)
		
      valign = gtk.Alignment(0.5,0.25, 0, 0)
      lbl = gtk.Label("Name of student")
		
      vb.pack_start(lbl, True, True, 10)
      text = gtk.Entry()
		
      vb.pack_start(text, True, True, 10)
      valign.add(vb)
		
      vbox.pack_start(valign)
      nb.append_page(vbox)
      nb.set_tab_label_text(vbox, "Name")
      hb = gtk.HButtonBox()
		
      btn1 = gtk.RadioButton(None,"Degree")
      hb.add(btn1)
		
      btn2 = gtk.RadioButton(btn1,"P.G.")
      hb.add(btn2)
		
      btn3 = gtk.RadioButton(btn1,"Doctorate")
      hb.add(btn3)
		
      nb.append_page(hb)
      nb.set_tab_label_text(hb, "Qualification")
		
      tv = gtk.TextView()
      nb.append_page(tv)
      nb.set_tab_label_text(tv, "about")
		
      self.add(nb)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
if __name__ == '__main__':
   PyApp()
   gtk.main()

После выполнения вышеуказанного кода отображается Блокнот с тремя страницами —

NoteBook DemoНоутбук

PyGTK — класс фреймов

Класс Frame является подклассом класса gtk.Bin. Он рисует декоративную рамку вокруг дочернего виджета, размещенного в нем. Рамка может содержать метку, положение которой может быть изменено.

Объект gtk.Frame создается с помощью следующего конструктора —

frame = gtk.Frame(label = None)

Ниже приведены методы класса gtk.Frame ().

  • set_label (text) — устанавливает метку в соответствии с текстом . Если None , текущая метка удаляется.

  • set_label_widget () — устанавливает виджет, отличный от gtk.Label, в качестве метки для фрейма.

  • set_label_align (x, y) — это устанавливает выравнивание виджета метки фрейма и художественное оформление (по умолчанию 0.0 и 0.5)

  • set_shadow_type () — устанавливает тип тени рамки.

set_label (text) — устанавливает метку в соответствии с текстом . Если None , текущая метка удаляется.

set_label_widget () — устанавливает виджет, отличный от gtk.Label, в качестве метки для фрейма.

set_label_align (x, y) — это устанавливает выравнивание виджета метки фрейма и художественное оформление (по умолчанию 0.0 и 0.5)

set_shadow_type () — устанавливает тип тени рамки.

Возможные значения —

  • gtk.SHADOW_NONE
  • gtk.SHADOW_IN
  • gtk.SHADOW_OUT
  • gtk.SHADOW_ETCHED_IN
  • tk.SHADOW_ETCHED_OUT

Следующий код демонстрирует функционирование виджета Frame. Группа из трех объектов gtk.RadioButton помещается в HButtonBox.

btn1 = gtk.RadioButton(None,"Degree")
btn2 = gtk.RadioButton(btn1,"P.G.")
btn3 = gtk.RadioButton(btn1,"Doctorate")
hb = gtk.HButtonBox()
hb.add(btn1)
hb.add(btn2)
hb.add(btn3)

Чтобы нарисовать границу вокруг рамки, она помещается в виджет «Рамка» и добавляется в окно верхнего уровня.

frm = gtk.Frame()
frm.add(hb)
self.add(frm)

пример

Соблюдайте следующий код —

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Frame Demo")
      self.set_default_size(250, 200)
      self.set_border_width(5)
      frm = gtk.Frame()
      hb = gtk.HButtonBox()
      btn1 = gtk.RadioButton(None,"Degree")
      hb.add(btn1)
      btn2 = gtk.RadioButton(btn1,"P.G.")
      hb.add(btn2)
      btn3 = gtk.RadioButton(btn1,"Doctorate")
      hb.add(btn3)
      frm.add(hb)
      frm.set_label("Qualifications")
      self.add(frm)
      self.connect("destroy", gtk.main_quit)
      self.show_all()

if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Frame Demo

PyGTK — класс AspectFrame

Класс gtk.AspectFrame является подклассом класса Frame. Дочерний виджет в этом фрейме всегда сохраняет свое соотношение сторон (ширины и высоты), даже если основное окно изменено.

Свойство ratio для виджета gtk.AspectFrame определяет соотношение ширины и высоты виджета. Соотношение сторон 0,5 означает, что ширина равна половине высоты; соотношение сторон 2,0 означает, что ширина в два раза больше высоты. Значение по умолчанию для свойства «ratio» — 1,0.

Следующий синтаксис используется для конструктора класса gtk.AspectFrame —

gtk.AspectFrame (label = None, xalign = 0.5, yalign = 0.5, ratio = 1.0, obey_child = True)

Свойство xalign определяет долю свободного пространства по горизонтали слева от дочернего элемента. 0.0 означает отсутствие свободного места слева, 1.0 означает все свободное пространство слева.

Свойство yalign определяет долю вертикального свободного пространства над дочерним элементом. 0.0 означает, что свободного пространства нет, 1.0 означает, что все свободное пространство находится выше.

Отношение ширины к высоте кадра сохраняется, если свойство obey_child имеет значение False.

Свойство obey_child определяет, должно ли отношение игнорироваться. По умолчанию установлено значение True.

Следующий код похож на тот, который используется для класса Frame. Единственное отличие состоит в том, что ButonBox размещается в виджете AspectFrame.

frm = gtk.AspectFrame(label = None, xalign = 0.5, yalign = 0.5, 
   ratio = 5.0, obey_child = False)

Примечание . Для свойства obey_child установлено значение False, поскольку желательно сохранять соотношение сторон, даже если размер окна изменяется.

пример

Соблюдайте следующий код —

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Aspect Frame Demo")
      self.set_default_size(250, 200)
      self.set_border_width(5)
      frm = gtk.AspectFrame(label = None, xalign = 0.5, yalign = 0.5, 
         ratio = 5.0, obey_child = False)
      hb = gtk.HButtonBox()
      btn1 = gtk.RadioButton(None,"Degree")
      hb.add(btn1)
      btn2 = gtk.RadioButton(btn1,"P.G.")
      hb.add(btn2)
      btn3 = gtk.RadioButton(btn1,"Doctorate")
      hb.add(btn3)
      frm.add(hb)
      frm.set_label("Qualifications")
      self.add(frm)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
      
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код создаст следующие оригинальные и измененные размеры окон:

Aspect Frame Demo

Оригинальное окно

Aspect Frame Demo

Изменение размера окна

PyGTK — класс TreeView

Виджет Treeview отображает содержимое модели, реализующей интерфейс gtk.TreeModel. PyGTK предоставляет следующие типы моделей —

  • gtk.ListStore
  • gtk.TreeStore
  • gtk.TreeModelSort

ListStore — это модель списка. При связывании с виджетом gtk.TreeView он создает поле списка, содержащее элементы для выбора. Объект gtk.ListStore объявлен со следующим синтаксисом:

store = gtk.ListStore(column_type)

Список может иметь несколько столбцов, предопределенные константы типа:

  • gobject.TYPE_BOOLEAN
  • gobject.TYPE_BOXED
  • gobject.TYPE_CHAR
  • gobject.TYPE_DOUBLE
  • gobject.TYPE_ENUM
  • gobject.TYPE_FLOAT
  • gobject.TYPE_INT
  • gobject.TYPE_LONG
  • gobject.TYPE_NONE
  • gobject.TYPE_OBJECT
  • gobject.TYPE_STRING
  • gobject.TYPE_UCHAR
  • gobject.TYPE_UINT
  • gobject.TYPE_ULONG
  • gtk.gdk.pixbuf и т. д.

Например, объект ListStore для хранения строковых элементов объявляется как —

store = gtk.ListStore(gobject.TYPE_STRING

Для добавления товаров в магазин используются методы append () —

store.append (["item 1"])

TreeStore — модель для многоколонного виджета Tree. Например, следующий оператор создает хранилище с одним столбцом, имеющим строковый элемент.

Store = gtk.TreeStore(gobject.TYPE_STRING)

Чтобы добавить элементы в TreeStore, используйте метод append (). Метод append () имеет два параметра, родительский и строковый. Чтобы добавить элемент верхнего уровня, родительский None.

row1 = store.append(None, ['row1'])

Вам нужно повторить этот оператор, чтобы добавить несколько строк.

Чтобы добавить дочерние строки, передайте строку верхнего уровня в качестве родительского параметра в метод append () —

childrow = store.append(row1, ['child1'])

Вам нужно повторить этот оператор, чтобы добавить несколько дочерних строк.

Теперь создайте виджет TreeView и используйте вышеуказанный объект TreeStore в качестве модели.

treeview = gtk.TreeView(store)

Теперь нам нужно создать TreeViewColumn для отображения данных магазина. Объект gtk.TreeViewColumn управляет заголовком и ячейками, используя gtk.CelRenderer. Объект TreeViewColumn создается с помощью следующего конструктора —

gtk.TreeViewColumn(title, cell_renderer,…)

В дополнение к заголовку и средству визуализации требуется ноль или более пар атрибут = столбец, чтобы указать, из какого столбца модели дерева следует извлечь значение атрибута. Эти параметры также могут быть установлены с использованием методов класса TreeViewColumn, приведенных ниже.

Gtk.CellRenderer — это базовый класс для набора объектов для визуализации различных типов данных. Производными классами являются CellRendererText, CellRendererPixBuf и CellRendererToggle.

Следующие методы класса TreeViewColumn используются для настройки его объекта:

  • TreeViewColumn.pack_start (cell, expand = True) — этот метод упаковывает объект CellRenderer в начальный столбец. Если для параметра расширения установлено значение «Истина», ячейке выделяется все выделенное пространство столбцов.

  • TreeViewColumn.add_attribute (ячейка, атрибут, столбец) — этот метод добавляет отображение атрибута в список в столбце дерева. Столбец является столбцом модели дерева.

  • TreeViewColumn.set_attributes () — этот метод устанавливает расположение атрибутов средства визуализации, используя пары attribute = column

  • TreeViewColumn.set_visible () — если True, столбец дерева виден

  • TreeViewColumn.set_title () — этот метод устанавливает для свойства «title» указанное значение.

  • TreeViewColumn.set_lickable () — если установлено значение True, заголовок может иметь фокус клавиатуры и быть нажатым.

  • TreeViewColumn.set_alignment (xalign) — этот метод устанавливает для свойства «alignment» значение xalign .

TreeViewColumn.pack_start (cell, expand = True) — этот метод упаковывает объект CellRenderer в начальный столбец. Если для параметра расширения установлено значение «Истина», ячейке выделяется все выделенное пространство столбцов.

TreeViewColumn.add_attribute (ячейка, атрибут, столбец) — этот метод добавляет отображение атрибута в список в столбце дерева. Столбец является столбцом модели дерева.

TreeViewColumn.set_attributes () — этот метод устанавливает расположение атрибутов средства визуализации, используя пары attribute = column

TreeViewColumn.set_visible () — если True, столбец дерева виден

TreeViewColumn.set_title () — этот метод устанавливает для свойства «title» указанное значение.

TreeViewColumn.set_lickable () — если установлено значение True, заголовок может иметь фокус клавиатуры и быть нажатым.

TreeViewColumn.set_alignment (xalign) — этот метод устанавливает для свойства «alignment» значение xalign .

Сигнал «нажал» испускается, когда пользователь нажимает кнопку заголовка древовидного столбца .

После настройки объекта TreeViewColumn он добавляется в виджет TreeView с помощью метода append_column ().

Ниже приведены важные методы класса TreeView:

  • TreevVew.set_model () — устанавливает свойство «модель» для дерева. Если древовидная структура уже имеет набор моделей, этот метод удалит его перед настройкой новой модели. Если модель None , это приведет к сбросу старой модели.

  • TreeView.set_header_clickable () — при значении True можно нажимать кнопки заголовка столбца.

  • TreeView.append_column () — это добавляет указанный TreeViewColumn к списку столбцов.

  • TreeView.remove_column () — удаляет указанный столбец из дерева.

  • TreeView.insert_column () — вставляет указанный столбец в древовидную структуру в месте, указанном позицией .

TreevVew.set_model () — устанавливает свойство «модель» для дерева. Если древовидная структура уже имеет набор моделей, этот метод удалит его перед настройкой новой модели. Если модель None , это приведет к сбросу старой модели.

TreeView.set_header_clickable () — при значении True можно нажимать кнопки заголовка столбца.

TreeView.append_column () — это добавляет указанный TreeViewColumn к списку столбцов.

TreeView.remove_column () — удаляет указанный столбец из дерева.

TreeView.insert_column () — вставляет указанный столбец в древовидную структуру в месте, указанном позицией .

Виджет TreeView излучает следующие сигналы:

курсора изменился Это испускается, когда курсор перемещается или установлен.
развернуть свернуть-курсор-строка Это испускается, когда строка в курсоре должна быть расширена или свернута.
Ряд активированных Это излучается, когда пользователь дважды щелкает строку дерева
рядный разрушились Это испускается, когда строка свернута пользователем или программным действием.
рядного расширен Это испускается, когда строка раскрывается с помощью пользователя или программного действия.

Два примера виджета TreeView приведены ниже. Первый пример использует ListStore для создания простого ListView.

Здесь создается объект ListStore и к нему добавляются строковые элементы. Этот объект ListStore используется в качестве модели для объекта TreeView —

store = gtk.ListStore(str)

treeView = gtk.TreeView()
treeView.set_model(store)

Затем CellRendererText добавляется к объекту TreeViewColumn, и то же самое добавляется к TreeView.

rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("Name", rendererText, text = 0)
treeView.append_column(column)

TreeView Object помещается в окно верхнего уровня, добавляя его в фиксированный контейнер.

Пример 1

Соблюдайте следующий код —

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

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("TreeView with ListStore")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      store = gtk.ListStore(str)
      store.append (["PyQt"])
      store.append (["Tkinter"])
      store.append (["WxPython"])
      store.append (["PyGTK"])
      store.append (["PySide"])
      
      treeView = gtk.TreeView()
      treeView.set_model(store)
		
      rendererText = gtk.CellRendererText()
      column = gtk.TreeViewColumn("Python GUI Libraries", rendererText, text=0)
      treeView.append_column(column)
      
      fixed = gtk.Fixed()
      lbl = gtk.Label("select a GUI toolkit")
      fixed.put(lbl, 25,75)
      fixed.put(treeView, 125,15)
		
      lbl2 = gtk.Label("Your choice is:")
      fixed.put(lbl2, 25,175)
      self.label = gtk.Label("")
		
      fixed.put(self.label, 125,175)
      self.add(fixed)
      
      treeView.connect("row-activated", self.on_activated)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def on_activated(self, widget, row, col):
      
	  model = widget.get_model()
      text = model[row][0]
      self.label.set_text(text)
		
def main():
   gtk.main()
   return

if __name__ == "__main__":
   bcb = PyApp()
   main()

Выбранный пользователем элемент отображается на ярлыке в окне при вызове функции обратного вызова on_activation .

TreeView с ListStore

Пример 2

Второй пример строит иерархическое TreeView из TreeStore. Эта программа следует той же последовательности построения хранилища, установки его в качестве модели для TreeView, разработки TreeViewColumn и добавления его в TreeView.

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("TreeView with TreeStore")
      self.set_size_request(400,200)
      self.set_position(gtk.WIN_POS_CENTER)
      vbox = gtk.VBox(False, 5)
      
      # create a TreeStore with one string column to use as the model
      store = gtk.TreeStore(str)
      
      # add row
      row1 = store.append(None, ['JAVA'])
      
      #add child rows
      store.append(row1,['AWT'])
      store.append(row1,['Swing'])
      store.append(row1,['JSF'])
      
      # add another row
      row2 = store.append(None, ['Python'])
      store.append(row2,['PyQt'])
      store.append(row2,['WxPython'])
      store.append(row2,['PyGTK'])
      
      # create the TreeView using treestore
      treeview = gtk.TreeView(store)
      tvcolumn = gtk.TreeViewColumn('GUI Toolkits')
      treeview.append_column(tvcolumn)
		
      cell = gtk.CellRendererText()
      tvcolumn.pack_start(cell, True)
      tvcolumn.add_attribute(cell, 'text', 0)
      vbox.add(treeview)
		
      self.add(vbox)
      
	  self.connect("destroy", gtk.main_quit)
      self.show_all()

PyApp()
gtk.main()

Следующее TreeView отображается в качестве вывода —

TreeView с TreeStore

PyGTK — Paned Class

Класс панорамирования — это базовый класс для виджетов, которые могут отображать две регулируемые панели по горизонтали (gtk.Hpaned) или по вертикали (gtk.Vpaned). Дочерние виджеты на панели добавляются с помощью методов pack1 () и pack2 ().

Виджет с панорамированием рисует ползунок разделителя между двумя панелями и предоставляет ручку для настройки их относительной ширины / высоты. Если для свойства resize дочернего виджета внутри панели установлено значение True, оно изменит размер в соответствии с размером панелей.

Следующие методы доступны для классов HPaned и VPaned —

  • Paned.add1 (child) — добавляет виджет, указанный child, в верхнюю или левую панель

  • Paned.add2 (child) — добавляет виджет, указанный child, в нижнюю или правую панель.

  • Paned.pack1 (child, resize, shrink) — добавляет виджет, указанный дочерним элементом, в верхнюю или левую панель с параметрами. Если для resize задано значение True , дочерний элемент должен быть изменен при изменении размера перемещаемого виджета. Если усадкаИстина , дочерний элемент может быть сделан меньше, чем его минимальный размер запроса.

  • Paned.pack2 (child, resize, shrink) — устанавливает позицию разделителя между двумя панелями.

Paned.add1 (child) — добавляет виджет, указанный child, в верхнюю или левую панель

Paned.add2 (child) — добавляет виджет, указанный child, в нижнюю или правую панель.

Paned.pack1 (child, resize, shrink) — добавляет виджет, указанный дочерним элементом, в верхнюю или левую панель с параметрами. Если для resize задано значение True , дочерний элемент должен быть изменен при изменении размера перемещаемого виджета. Если усадкаИстина , дочерний элемент может быть сделан меньше, чем его минимальный размер запроса.

Paned.pack2 (child, resize, shrink) — устанавливает позицию разделителя между двумя панелями.

Оба типа виджетов Paned испускают следующие сигналы —

Accept-позицию Это испускается, когда у панорамирования есть фокус, заставляющий дочерний виджет с фокусом быть активированным.
отменить-позицию Это испускается, когда клавиша Esc нажата, когда панорамирование имеет фокус.
въезд ручка Это испускается, когда панорамирование имеет фокус, и разделитель перемещается.

пример

В следующем примере используется виджет gtk.Hpaned. На левой панели добавлен виджет TreeView, а на правой панели — виджет TextView. Когда выбран какой-либо ряд в TreeView, он будет излучать сигнал row_activation, который связан с функцией обратного вызова. Функция on_activation () извлекает текст строки и отображается на панели просмотра текста.

Соблюдайте код —

import gtk, gobject

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("HPaned widget Demo")
      self.set_default_size(250, 200)
      vp = gtk.HPaned()
      sw = gtk.ScrolledWindow()
      sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 
		
      tree = gtk.TreeView()
      languages = gtk.TreeViewColumn()
      languages.set_title("GUI Toolkits")
      cell = gtk.CellRendererText()
      languages.pack_start(cell, True)
      languages.add_attribute(cell, "text", 0)
      treestore = gtk.TreeStore(str)
      it = treestore.append(None, ["Python"])
		
      treestore.append(it, ["PyQt"])
      treestore.append(it, ["wxPython"])
      treestore.append(it, ["PyGTK"])
      treestore.append(it, ["Pydide"])
		
      it = treestore.append(None, ["Java"])
      treestore.append(it, ["AWT"])
      treestore.append(it, ["Swing"])
      treestore.append(it, ["JSF"])
      treestore.append(it, ["SWT"])
		
      tree.append_column(languages)
      tree.set_model(treestore)
		
      vp.add1(tree)
      self.tv = gtk.TextView()
      vp.add2(self.tv)
      vp.set_position(100)
      self.add(vp)
		
      tree.connect("row-activated", self.on_activated)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def on_activated(self, widget, row, col):
      model = widget.get_model()
      text = model[row][0]
      print text
		
      buffer = gtk.TextBuffer()
      buffer.set_text(text+" is selected")
      self.tv.set_buffer(buffer)

if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Hpaned Widget Demo

PyGTK — Класс строки состояния

Область уведомлений, обычно в нижней части окна, называется строкой состояния. Любой тип сообщения об изменении статуса может отображаться в строке состояния. У этого также есть власть, используя которую это может быть изменено.

Виджет gtk.Statusbar поддерживает стек сообщений. Следовательно, новое сообщение отображается поверх текущего сообщения. Если оно появилось, более раннее сообщение снова будет видно. Источник сообщения должен быть идентифицирован context_id, чтобы идентифицировать его однозначно.

Ниже приведен конструктор виджета gtk.Statusbar —

bar = gtk.Statusbar()

Ниже приведены методы класса gtk.Statusbar —

  • Statusbar.push (context_id, text) — это помещает новое сообщение в стек строки состояния.

  • Statusbar.pop (context_id) — удаляет верхнее сообщение с указанным context_id из стека строки состояния.

Statusbar.push (context_id, text) — это помещает новое сообщение в стек строки состояния.

Statusbar.pop (context_id) — удаляет верхнее сообщение с указанным context_id из стека строки состояния.

Следующие сигналы испускаются виджетом Statusbar —

текст-Popped Это испускается, когда сообщение удаляется из стека сообщений строки состояния.
текста толкнул Это излучается, когда сообщение добавляется в стек сообщений строки состояния.

В следующем примере демонстрируется функционирование строки состояния. Окно Toplevel содержит VBox с двумя строками. В верхней строке есть фиксированный виджет, в который помещаются метка, виджет «Ввод» и кнопка. Принимая во внимание, что в нижней строке добавлен виджет gtk.Statusbar.

Чтобы отправить сообщение в строку состояния, необходимо извлечь его context_id.

id1 = self.bar.get_context_id("Statusbar")

Сигнал «нажал» объекта Button связан с функцией обратного вызова, посредством которой в строку состояния помещается сообщение. И сигнал «активировать» испускается при нажатии клавиши Enter внутри виджета ввода. Этот виджет связан с другим обратным вызовом.

btn.connect("clicked", self.on_clicked, id1)
txt.connect("activate", self.on_entered, id1)

Оба обратных вызова используют метод push () для прошивки сообщения в области уведомлений.

пример

Соблюдайте следующий код —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Statusbar demo")
      self.set_size_request(400,200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      vbox = gtk.VBox()
      fix = gtk.Fixed()
      lbl = gtk.Label("Enter name")
		
      fix.put(lbl, 175, 50)
      txt = gtk.Entry()
      fix.put(txt, 150, 100)
		
      btn = gtk.Button("ok")
      fix.put(btn, 200,150)
		
      vbox.add(fix)
      self.bar = gtk.Statusbar()
      vbox.pack_start(self.bar, True, False, 0)
		
      id1 = self.bar.get_context_id("Statusbar")
      btn.connect("clicked", self.on_clicked, id1)
      txt.connect("activate", self.on_entered, id1)
		
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
      def on_clicked(self, widget, data=None):
         self.bar.push(data, "Button clicked
		
      def on_entered(self, widget, data):
         self.bar.push(data, "text entered")

PyApp()
gtk.main()

После выполнения приведенный выше код будет отображать следующий вывод —

Демо статусбара

Попробуйте ввести текстовое поле и нажать клавишу «Ввод», чтобы увидеть текстовое сообщение в строке состояния.

PyGTK — класс ProgressBar

Индикаторы выполнения используются, чтобы дать пользователю визуальную индикацию длительного процесса. Виджет gtk.ProgressBar можно использовать в двух режимах — в процентном режиме и в режиме активности.

Когда можно точно оценить объем ожидаемой работы, индикатор выполнения может использоваться в процентном режиме, и пользователь видит добавочную панель, отображающую процент выполненного задания. Если, с другой стороны, объем работы, подлежащей выполнению, может быть точно определен, индикатор выполнения используется в режиме активности, в котором панель отображает активность, отображая блок, перемещающийся вперед и назад.

Следующий конструктор инициализирует виджет класса gtk.ProgressBar —

pb = gtk.ProgressBar()

gtk.ProgressBar использует следующие методы для управления функциональностью —

  • ProgressBar.pulse () — это подталкивает индикатор выполнения, чтобы показать, что был достигнут некоторый прогресс, но вы не знаете, сколько. Этот метод также изменяет режим индикатора выполнения на «режим активности», когда блок подпрыгивает вперед и назад.

  • ProgressBar.set_fraction (фракция) — это заставляет индикатор выполнения «заполнять» часть бара, заданную дробью . Значение дроби должно быть между 0,0 и 1,0.

  • ProgressBar.set_pulse_setup () — устанавливает часть (указанную в виде дроби ) общей длины индикатора выполнения для перемещения подпрыгивающего блока при каждом вызове метода pulse () .

  • ProgressBar.set_orientation () — устанавливает ориентацию индикатора выполнения. Может быть установлена ​​одна из следующих констант:

    • gtk.PROGRESS_LEFT_TO_RIGHT

    • gtk.PROGRESS_RIGHT_TO_LEFT

    • gtk.PROGRESS_BOTTOM_TO_TOP

    • gtk.PROGRESS_TOP_TO_BOTTOM

ProgressBar.pulse () — это подталкивает индикатор выполнения, чтобы показать, что был достигнут некоторый прогресс, но вы не знаете, сколько. Этот метод также изменяет режим индикатора выполнения на «режим активности», когда блок подпрыгивает вперед и назад.

ProgressBar.set_fraction (фракция) — это заставляет индикатор выполнения «заполнять» часть бара, заданную дробью . Значение дроби должно быть между 0,0 и 1,0.

ProgressBar.set_pulse_setup () — устанавливает часть (указанную в виде дроби ) общей длины индикатора выполнения для перемещения подпрыгивающего блока при каждом вызове метода pulse () .

ProgressBar.set_orientation () — устанавливает ориентацию индикатора выполнения. Может быть установлена ​​одна из следующих констант:

gtk.PROGRESS_LEFT_TO_RIGHT

gtk.PROGRESS_RIGHT_TO_LEFT

gtk.PROGRESS_BOTTOM_TO_TOP

gtk.PROGRESS_TOP_TO_BOTTOM

В следующей программе виджет gtk.ProgressBar используется в режиме активности. Следовательно, начальная позиция прогресса устанавливается равной 0.0 методом set_fraction () .

self.pb = gtk.ProgressBar()
self.pb.set_text("Progress")
self.pb.set_fraction(0.0)

Чтобы увеличить прогресс на 1 процент после 100 миллисекунд, объявляется объект таймера и настраивается функция обратного вызова, которая будет вызываться через каждые 100 мс, чтобы обновлялся индикатор выполнения.

self.timer = gobject.timeout_add (100, progress_timeout, self)

Здесь progress_timeout () является функцией обратного вызова. Он увеличивает параметр метода set_fraction () на 1 процент и обновляет текст в индикаторе выполнения, отображая процент выполнения.

def progress_timeout(pbobj):
   new_val = pbobj.pb.get_fraction() + 0.01
   pbobj.pb.set_fraction(new_val)
   pbobj.pb.set_text(str(new_val*100)+" % completed")
   return True

пример

Соблюдайте следующий код —

import gtk, gobject
   
def progress_timeout(pbobj):
   new_val = pbobj.pb.get_fraction() + 0.01
   pbobj.pb.set_fraction(new_val)
   pbobj.pb.set_text(str(new_val*100)+" % completed")
   return True

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Progressbar demo")
      self.set_size_request(300,200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      fix = gtk.Fixed()
      self.pb = gtk.ProgressBar()
      self.pb.set_text("Progress")
      self.pb.set_fraction(0.0)
		
      fix.put(self.pb,80,100)
      self.add(fix)
      self.timer = gobject.timeout_add (100, progress_timeout, self)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
PyApp()
gtk.main()

Приведенный выше код сгенерирует следующий вывод:

ПрогрессБар Демо

Чтобы использовать индикатор выполнения в режиме активности, измените функцию обратного вызова на следующую и запустите —

def progress_timeout(pbobj):
   pbobj.pb.pulse()
   return True

Движение вперед-назад блока внутри индикатора выполнения покажет ход действия.

ПрогрессБар Демо

PyGTK — Класс просмотра

Если виджет имеет площадь больше, чем у окна верхнего уровня, он связан с контейнером ViewPort. Виджет gtk.Viewport предоставляет возможность настройки для использования в ScrolledWindow. Например, виджет Label не имеет никаких настроек. Следовательно, ему нужен видовой экран. Некоторые виджеты имеют встроенную поддержку прокрутки. Но виджет Label или gtk.Table не имеет встроенной поддержки прокрутки. Следовательно, они должны использовать Viewport.

Класс ViewPort имеет следующий конструктор —

gtk.Viewport(hadj, vadj)

Здесь hadj и vadj — объекты настройки, связанные с окном просмотра.

Класс gtk.ViewPort использует следующие методы —

  • Viewport.set_hadjustment () — это устанавливает свойство «hadjustment»

  • Viewport.set_vadjustment () — это устанавливает свойство «vadjustment»

  • Viewport.set_shadow_type () — устанавливает для свойства «shadow-type» значение типа . Значение типа должно быть одним из —

    • gtk.SHADOW_NONE

    • gtk.SHADOW_IN

    • gtk.SHADOW_OUT

    • gtk.SHADOW_ETCHED_IN

    • gtk.SHADOW_ETCHED_OUT

Viewport.set_hadjustment () — это устанавливает свойство «hadjustment»

Viewport.set_vadjustment () — это устанавливает свойство «vadjustment»

Viewport.set_shadow_type () — устанавливает для свойства «shadow-type» значение типа . Значение типа должно быть одним из —

gtk.SHADOW_NONE

gtk.SHADOW_IN

gtk.SHADOW_OUT

gtk.SHADOW_ETCHED_IN

gtk.SHADOW_ETCHED_OUT

Объект gtk.Viewport излучает сигнал set-scroll-Adjustments при изменении одного или обоих горизонтальных и вертикальных объектов gtk.Adjustment.

PyGTK — ScrolledWindow Class

Прокручиваемое окно создано для доступа к другому виджету области больше, чем родительское окно. Некоторые виджеты, такие как TreeView и TextView имеют встроенную поддержку прокрутки. Для других, таких как Label или Table, должен быть предоставлен Viewport.

Следующий синтаксис используется для конструктора класса gtk.ScrolledWindow —

sw = gtk.ScrolledWindow(hadj, vadj)

Ниже приведены методы класса gtk.ScrolledWindow.

  • ScrolledWindow.set_hadjustment () — устанавливает горизонтальную корректировку для объекта gtk.Adjustment

  • ScrolledWindow.set_vadjustment () — устанавливает вертикальную корректировку для объекта gtk.Adjustment

  • ScrolledWindow.set_Policy (hpolicy, vpolicy) — устанавливает свойства «hscrollbar_policy» и «vscrollbar_policy». Используется одна из следующих предопределенных констант —

    • gtk.POLICY_ALWAYS — полоса прокрутки всегда присутствует

    • gtk.POLICY_AUTOMATIC — полоса прокрутки присутствует только при необходимости, т. е. содержимое больше окна

    • gtk.POLICY_NEVER — полоса прокрутки никогда не присутствует

  • ScrolledWindow.add_with_viewport ( child ) — этот метод используется для добавления виджета (указанного дочерним элементом ) без встроенных возможностей прокрутки в прокручиваемое окно. Это удобная функция, которая эквивалентна добавлению дочернего элемента в gtk.Viewport , а затем добавлению области просмотра в прокручиваемое окно.

ScrolledWindow.set_hadjustment () — устанавливает горизонтальную корректировку для объекта gtk.Adjustment

ScrolledWindow.set_vadjustment () — устанавливает вертикальную корректировку для объекта gtk.Adjustment

ScrolledWindow.set_Policy (hpolicy, vpolicy) — устанавливает свойства «hscrollbar_policy» и «vscrollbar_policy». Используется одна из следующих предопределенных констант —

gtk.POLICY_ALWAYS — полоса прокрутки всегда присутствует

gtk.POLICY_AUTOMATIC — полоса прокрутки присутствует только при необходимости, т. е. содержимое больше окна

gtk.POLICY_NEVER — полоса прокрутки никогда не присутствует

ScrolledWindow.add_with_viewport ( child ) — этот метод используется для добавления виджета (указанного дочерним элементом ) без встроенных возможностей прокрутки в прокручиваемое окно. Это удобная функция, которая эквивалентна добавлению дочернего элемента в gtk.Viewport , а затем добавлению области просмотра в прокручиваемое окно.

Следующий код добавляет прокручиваемое окно вокруг объекта gtk.Table с размерами 10 на 10. Поскольку объект Table не поддерживает корректировки автоматически, он добавляется в область просмотра.

sw = gtk.ScrolledWindow()
table = gtk.Table(10,10)

Два вложенных цикла используются для добавления 10 строк по 10 столбцов в каждой. Виджет gtk.Button находится в каждой ячейке.

for i in range(1,11):
   for j in range(1,11):
      caption = "Btn"+str(j)+str(i)
      btn = gtk.Button(caption)
      table.attach(btn, i, i+1, j, j+1)

Эта достаточно большая таблица теперь добавляется в прокручиваемое окно вместе с окном просмотра.

sw.add_with_viewport(table)

пример

Соблюдайте следующий код —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("ScrolledWindow and Viewport")
      self.set_size_request(400,300)
      self.set_position(gtk.WIN_POS_CENTER)
      sw = gtk.ScrolledWindow()
      table = gtk.Table(10,10)
      table.set_row_spacings(10)
      table.set_col_spacings(10)
      for i in range(1,11):
         for j in range(1,11):
            caption = "Btn"+str(j)+str(i)
            btn = gtk.Button(caption)
            table.attach(btn, i, i+1, j, j+1)
      sw.add_with_viewport(table)
      self.add(sw)
      
	  self.connect("destroy", gtk.main_quit)
      self.show_all()

PyApp()
gtk.main()

Приведенный выше код сгенерирует следующий вывод:

ScrolledWindow

PyGTK — Arrow Class

Объект gtk.Arrow используется для рисования простой стрелки, указывающей на четыре основных направления. Этот класс унаследован от класса gtk.Misc, и объект будет занимать любое выделенное ему пространство, например, виджет Label или Button.

Как правило, объект Arrow создается с помощью следующего конструктора —

Arr = gtk.Arrow(arrow_type, shadow_type)

Предопределенные константы arrow_type —

  • gtk.ARROW_UP
  • gtk.ARROW_DOWN
  • gtk.ARROW_LEFT
  • gtk.ARROW_RIGHT

Предопределенные константы shadow_type перечислены в следующей таблице:

gtk.SHADOW_NONE Нет плана.
gtk.SHADOW_IN Контур скошен внутрь.
gtk.SHADOW_OUT Контур скошен наружу, как кнопка.
gtk.SHADOW_ETCHED_IN Сам контур является внутренним скосом, но рамка скошена наружу.
gtk.SHADOW_ETCHED_OUT Контур — наружный скос, рамка — внутри.

пример

В следующем примере четыре виджета Button добавляются в Hbox. Вверху каждой кнопки размещается объект gtk.Arrow, указывающий соответственно ВВЕРХ, ВНИЗ, ВЛЕВО и ВПРАВО. Контейнер HBOX размещается в нижней части окна верхнего уровня с помощью выравнивающего контейнера.

Соблюдайте код —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Arrow Demo")
      self.set_size_request(300, 200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      vbox = gtk.VBox(False, 5)
      hbox = gtk.HBox(True, 3)
      valign = gtk.Alignment(0, 1, 0, 0)
      vbox.pack_start(valign)
		
      arr1 = gtk.Arrow(gtk.ARROW_UP, gtk.SHADOW_NONE)
      arr2 = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_NONE)
      arr3 = gtk.Arrow(gtk.ARROW_LEFT, gtk.SHADOW_NONE)
      arr4 = gtk.Arrow(gtk.ARROW_RIGHT, gtk.SHADOW_NONE)
		
      btn1 = gtk.Button()
      btn1.add(arr1)
      btn2 = gtk.Button()
      btn2.add(arr2)
      btn3 = gtk.Button()
      btn3.add(arr3)
      btn4 = gtk.Button()
      btn4.add(arr4)
		
      hbox.add(btn1)
      hbox.add(btn2)
      hbox.add(btn3)
      hbox.add(btn4)
		
      halign = gtk.Alignment(0.5, 0.5, 0, 0)
      halign.add(hbox)
		
      vbox.pack_start(halign, False, True, 10)
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()

PyApp()
gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Arrow Demo

PyGTK — класс изображения

Этот класс также унаследован от класса gtk.Misc. Объект класса gtk.Image отображает изображение. Обычно изображение должно быть загружено из файла в пиксельном буфере, представляющем класс gtk.gdk.Pixbuf. Вместо этого удобная функция set_from_file () обычно используется для отображения данных изображения из файла в виджете gk.Image.

Самый простой способ создать объект gtk.Image — использовать следующий конструктор:

img = gtk.Image()

Ниже приведены методы класса gtk.Image:

  • Image.set_from_file () — устанавливает данные изображения из содержимого файла.

  • Image.set_from_pixbuf () — это устанавливает данные изображения из растрового изображения, в котором данные изображения загружаются для манипуляции за пределами экрана .

  • Image.set_from_pixbuf () — устанавливает данные изображения с помощью pixbuf, который является объектом, содержащим данные, описывающие изображение с использованием ресурсов на стороне клиента.

  • Image.set_from_stock ()Устанавливает данные изображения из стоковой позиции, идентифицированной stock_id .

  • Image.clear () — удаляет текущее изображение.

  • Image.set_from_image () — устанавливает данные изображения из клиентского буфера изображения в формате пикселей текущего дисплея. Если изображение Нет , текущие данные изображения будут удалены.

Image.set_from_file () — устанавливает данные изображения из содержимого файла.

Image.set_from_pixbuf () — это устанавливает данные изображения из растрового изображения, в котором данные изображения загружаются для манипуляции за пределами экрана .

Image.set_from_pixbuf () — устанавливает данные изображения с помощью pixbuf, который является объектом, содержащим данные, описывающие изображение с использованием ресурсов на стороне клиента.

Image.set_from_stock ()Устанавливает данные изображения из стоковой позиции, идентифицированной stock_id .

Image.clear () — удаляет текущее изображение.

Image.set_from_image () — устанавливает данные изображения из клиентского буфера изображения в формате пикселей текущего дисплея. Если изображение Нет , текущие данные изображения будут удалены.

пример

В следующей программе объект gtk.Image получается из файла изображения. Он добавляется в окне верхнего уровня.

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("PyGtk Image demo")
      self.set_size_request(300, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
	  image1 = gtk.Image()
      image1.set_from_file("python.png")
      self.add(image1)
      
	  self.connect("destroy", gtk.main_quit)
      self.show_all()

PyApp()
gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Демонстрация изображения

PyGTK — класс DrawingArea

Виджет DrawingArea представляет пустой холст, содержащий окно gtk.gdk.Window, на котором можно рисовать такие объекты, как линия, прямоугольник, дуга и т. Д.

PyGTK использует библиотеку Cairo для таких операций рисования. Каир — это популярная библиотека векторной графики 2D. Он написан на C., хотя он имеет привязки на большинстве языков, таких как C ++, Java, Python, PHP и т. Д. Библиотека Cairo может использоваться для рисования на стандартных устройствах вывода в различных операционных системах. Он также может быть использован для создания файлов PDF, SVG и пост-скриптов.

Чтобы выполнить различные операции рисования, мы должны извлечь устройство из текста целевого выходного объекта. В этом случае, поскольку рисунок появляется в виджете gtk.DrawingArea, получается контекст устройства gdk.Window, содержащегося в нем. Этот класс имеет метод cairo-create (), который возвращает контекст устройства.

area = gtk.DrawingArea()
dc = area.window.cairo_create()

Виджет DrawingArea может быть подключен к обратным вызовам на основе следующих сигналов, излучаемых им:

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

События Mouse и Keyboard могут также использоваться для вызова обратных вызовов методом add_events () класса gtk.Widget .

Особый интерес представляет сигнал события expose, который излучается при первом появлении холста DrawingArea. Различные методы рисования 2D-объектов, определенные в библиотеке Cairo, вызываются из этого обратного вызова, связанного с сигналом expose-event. Эти методы рисуют соответствующие объекты в контексте устройства Cairo.

Ниже приведены доступные методы рисования —

  • dc.rectangle (x, y, w, h) — рисует прямоугольник с указанной верхней левой координатой и имеет ширину и высоту.

  • dc.arc (x, y, r, a1, a2) — рисует круговую дугу с заданным радиусом и двумя углами.

  • dc.line (x1, y1, x2, y2) — рисует линию между двумя парами координат.

  • dc.line_to (x, y) — рисует линию от текущей позиции до (x, y)

  • dc.show_text (str) — рисует строку в текущей позиции курсора

  • dc.stroke () — рисует контур

  • dc.fill () — заполняет фигуру текущим цветом

  • dc.set_color_rgb (r, g, b) — устанавливает цвет для контура и заполняет значениями r, g и b от 0,0 до 1,0

dc.rectangle (x, y, w, h) — рисует прямоугольник с указанной верхней левой координатой и имеет ширину и высоту.

dc.arc (x, y, r, a1, a2) — рисует круговую дугу с заданным радиусом и двумя углами.

dc.line (x1, y1, x2, y2) — рисует линию между двумя парами координат.

dc.line_to (x, y) — рисует линию от текущей позиции до (x, y)

dc.show_text (str) — рисует строку в текущей позиции курсора

dc.stroke () — рисует контур

dc.fill () — заполняет фигуру текущим цветом

dc.set_color_rgb (r, g, b) — устанавливает цвет для контура и заполняет значениями r, g и b от 0,0 до 1,0

пример

Следующий скрипт рисует различные фигуры и тестирует их с помощью методов Каира.

import gtk
import math

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("Basic shapes using Cairo")
      self.set_size_request(400, 250)
      self.set_position(gtk.WIN_POS_CENTER)
      
	  self.connect("destroy", gtk.main_quit)
		
      darea = gtk.DrawingArea()
      darea.connect("expose-event", self.expose)
		
      self.add(darea)
      self.show_all()
		
      def expose(self, widget, event):
      cr = widget.window.cairo_create()
		
      cr.set_line_width(2)
      cr.set_source_rgb(0,0,1)
      cr.rectangle(10,10,100,100)
      cr.stroke()
		
      cr.set_source_rgb(1,0,0)
      cr.rectangle(10,125,100,100)
      cr.stroke()
		
      cr.set_source_rgb(0,1,0)
      cr.rectangle(125,10,100,100)
      cr.fill()
		
      cr.set_source_rgb(0.5,0.6,0.7)
      cr.rectangle(125,125,100,100)
      cr.fill()
		
      cr.arc(300, 50, 50,0, 2*math.pi)
      cr.set_source_rgb(0.2,0.2,0.2)
      cr.fill()
		
      cr.arc(300, 200, 50, math.pi,0)
      cr.set_source_rgb(0.1,0.1,0.1)
      cr.stroke()
		
      cr.move_to(50,240)
      cr.show_text("Hello PyGTK")
      cr.move_to(150,240)
      cr.line_to(400,240)
      cr.stroke()

PyApp()
gtk.main() 

Приведенный выше скрипт сгенерирует следующий вывод:

Основные формы Каир

PyGTK — класс SpinButton

Виджет SpinnButton, часто называемый Spinner, является виджетом gtk.Entry со стрелками вверх и вниз справа. Пользователь может ввести числовое значение непосредственно в нем или увеличить или уменьшить, используя стрелки вверх и вниз. Класс gtk.SpinButton унаследован от класса gtk.Entry. Он использует объект gtk.Adjustment, с помощью которого можно ограничить диапазон и шаг числового значения в счетчике.

Виджет SpinButton создается с помощью следующего конструктора —

sp = gtk.SpinButton(adj, climb_rate, digits)

Здесь adj представляет диапазон управления объектом gtk.Adjustment , подъем — коэффициент ускорения и количество десятичных знаков, указанных цифрами.

Класс gtk.SpinButton имеет следующие методы —

  • SpinButton.set_adjustment () — устанавливает свойство «корректировки».

  • SpinButton.set_digits () — это устанавливает свойство «digits» в значение, чтобы определить количество десятичных разрядов, которые будут отображаться с помощью spinbutton.

  • SpinButton.set_increments (step, page) — Устанавливает значение шага, к которому применяется приращение, применяемое для каждого нажатия левой кнопки мыши, и значение страницы, которое является приращением, применяемым для каждого нажатия средней кнопки мыши.

  • SpinButton.set_range () — устанавливает минимальные и максимальные допустимые значения для spinbutton.

  • SpinButton.set_value () — Это устанавливает программную кнопку вращения на новое значение.

  • SpinButton.update_policy () — допустимыми значениями являются gtk.UPDATE_ALWAYS и gtk.UPDATE_VALID

  • SpinButton.spin (direction, increment = 1) — увеличивает или уменьшает значение Spinner в указанном направлении.

SpinButton.set_adjustment () — устанавливает свойство «корректировки».

SpinButton.set_digits () — это устанавливает свойство «digits» в значение, чтобы определить количество десятичных разрядов, которые будут отображаться с помощью spinbutton.

SpinButton.set_increments (step, page) — Устанавливает значение шага, к которому применяется приращение, применяемое для каждого нажатия левой кнопки мыши, и значение страницы, которое является приращением, применяемым для каждого нажатия средней кнопки мыши.

SpinButton.set_range () — устанавливает минимальные и максимальные допустимые значения для spinbutton.

SpinButton.set_value () — Это устанавливает программную кнопку вращения на новое значение.

SpinButton.update_policy () — допустимыми значениями являются gtk.UPDATE_ALWAYS и gtk.UPDATE_VALID

SpinButton.spin (direction, increment = 1) — увеличивает или уменьшает значение Spinner в указанном направлении.

Ниже приведены предопределенные константы направления.

gtk.SPIN_STEP_FORWARD вперед step_increment
gtk.SPIN_STEP_BACKWARD назад шаг за шагом
gtk.SPIN_PAGE_FORWARD вперед step_increment
gtk.SPIN_PAGE_BACKWARD назад шаг за шагом
gtk.SPIN_HOME перейти к минимальному значению
gtk.SPIN_END перейти к максимальному значению
gtk.SPIN_USER_DEFINED добавить приращение к значению
  • SpinButton.set_wrap () — если для wrap задано значение True, значение кнопки прокрутки переходит к противоположному пределу, когда верхний или нижний предел диапазона превышает.

SpinButton.set_wrap () — если для wrap задано значение True, значение кнопки прокрутки переходит к противоположному пределу, когда верхний или нижний предел диапазона превышает.

Виджет gtk.SpinButton излучает следующие сигналы:

Изменение значение Это испускается, когда значение spinbutton изменяется действием клавиатуры
вход Это испускается, когда значение изменяется.
выход Это испускается, когда значение показа кнопки вращения изменяется. Возвращает True, если обработчик успешно устанавливает текст, и дальнейшая обработка не требуется.
стоимость изменилось Это излучается, когда изменяется любая из настроек, которые изменяют отображение кнопки вращения.
завернутый Это излучается сразу после того, как спинбаттон переходит от максимального значения к минимальному или наоборот.

пример

В следующем примере создается простой селектор дат с использованием трех виджетов SpinButton. Селектор дня применяет объект «Корректировка» для ограничения значения от 1 до 31. Второй селектор предназначен для количества месяцев 1—12. Третий селектор выбирает диапазон года 2000—2020.

Соблюдайте код —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("SpinButton Demo")
      self.set_size_request(300, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      self.set_border_width(20)
		
      vbox = gtk.VBox(False, 5)
      hbox = gtk.HBox(True, 3)
      lbl1 = gtk.Label("Date")
      hbox.add(lbl1)
		
      adj1 = gtk.Adjustment(1.0, 1.0, 31.0, 1.0, 5.0, 0.0)
      spin1 = gtk.SpinButton(adj1, 0, 0)
      spin1.set_wrap(True)
		
      hbox.add(spin1)
      lbl2 = gtk.Label("Month")
      hbox.add(lbl2)
		
      adj2 = gtk.Adjustment(1.0, 1.0, 12.0, 1.0, 5.0, 0.0)
      spin2 = gtk.SpinButton(adj2, 0, 0)
      spin2.set_wrap(True)
		
      hbox.add(spin2)
      lbl3 = gtk.Label("Year")
      hbox.add(lbl3)
		
      adj3 = gtk.Adjustment(1.0, 2000.0, 2020.0, 1.0, 5.0, 0.0)
      spin3 = gtk.SpinButton(adj3, 0, 0)
      spin3.set_wrap(True)
      hbox.add(spin3)
		
      frame = gtk.Frame()
      frame.add(hbox)
      frame.set_label("Date of Birth")
		
      vbox.add(frame)
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
PyApp()
gtk.main()

После выполнения приведенный выше код выдаст следующий вывод:

SpinButton Demo

PyGTK — Календарный класс

Виджет Календарь в наборе инструментов PyGTK отображает простой календарь с просмотром одного месяца за раз. Элементы управления для изменения месяца и года отображаются по умолчанию. Параметры отображения могут быть настроены соответствующим образом.

Значение свойства месяца находится в диапазоне от 0 до 11, а свойство даты — от 1 до 31.

Существует простой конструктор для создания объекта gtk.Calendar —

cal = gtk.Calendar()

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

Класс gtk.Calendar имеет следующие методы —

  • Calendar.select_month (mm, yy) — изменяет отображение календаря на указанные мм и гг .

  • Calendar.select_day (dd) — выбирает указанный dd в календаре, когда он имеет значение от 1 до 31. Если dd равно 0, выбор текущего дня будет удален.

  • Calendar.display_options () — устанавливает для параметров отображения календаря значение, указанное флагами . Возможные варианты отображения являются комбинацией:

Calendar.select_month (mm, yy) — изменяет отображение календаря на указанные мм и гг .

Calendar.select_day (dd) — выбирает указанный dd в календаре, когда он имеет значение от 1 до 31. Если dd равно 0, выбор текущего дня будет удален.

Calendar.display_options () — устанавливает для параметров отображения календаря значение, указанное флагами . Возможные варианты отображения являются комбинацией:

gtk.CALENDAR_SHOW_HEADING Указывает, что должны отображаться месяц и год.
gtk.CALENDAR_SHOW_DAY_NAMES Указывает, что должны присутствовать описания трех буквенных дней.
gtk.CALENDAR_NO_MONTH_CHANGE Запрещает пользователю переключать месяцы с календарем.
gtk.CALENDAR_SHOW_WEEK_NUMBERS Отображает номера каждой недели текущего года в левой части календаря.
gtk.CALENDAR_WEEK_START_MONDAY Начинает календарную неделю в понедельник вместо воскресенья по умолчанию.
  • Calendar.get_date () — извлекает текущий год, месяц и выбранные номера календаря в виде кортежа (год, месяц, день).

Calendar.get_date () — извлекает текущий год, месяц и выбранные номера календаря в виде кортежа (год, месяц, день).

Виджет gtk.Calendar излучает следующие сигналы:

день выбран Это излучается, когда день выбирается пользователем или программно.
месяц изменились Это испускается, когда календарный месяц изменяется программно или пользователем.
следующий месяц Это происходит, когда пользователь щелкает элемент управления «следующий месяц» в заголовке календаря.
в следующем году Это происходит, когда пользователь щелкает элемент управления «следующий год» в заголовке календаря.
пред-месяц Это происходит, когда пользователь щелкает элемент управления «предыдущий месяц» в заголовке календаря.
предыдущий год Это происходит, когда пользователь щелкает элемент управления «предыдущий год» в заголовке календаря.

В следующем примере элемент управления gtk.Calendar и четыре кнопки размещаются в окне верхнего уровня.

При нажатии кнопки «заголовок» параметры отображения календаря устанавливаются на SHOW_HEADING —

def heading(self, widget):
   self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING)

Когда пользователь нажимает кнопку «имя дня», обратный вызов устанавливает параметры отображения на SHOW_DAY_NAMES —

def dayname(self, widget):
self.cal.set_display_options(gtk.CALENDAR_SHOW_DAY_NAMES)

Обе опции дисплея активируются при нажатии кнопки «обе». Начнем с того, что все флаги параметров отображения будут удалены, установив его в 0.

self.cal.set_display_options(0)

Кнопка «Установить» выскакивает в окне сообщения, отображающего текущую отмеченную дату.

tp = self.cal.get_date()
str1 = str(tp[0])
str2 = str(tp[1]+1)
str3 = str(tp[2])
label = gtk.Label("Date selected:"+str3+"-"+str2+"-"+str1)
dialog.vbox.add(label)
label.show()

пример

Соблюдайте следующий код —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Calendar Demo")
      self.set_size_request(300, 200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      vbox = gtk.VBox(False, 5)
      self.cal = gtk.Calendar()
      halign1 = gtk.Alignment(0.5, 0.5, 0, 0)
      halign1.add(self.cal)
		
      self.cal.set_display_options(0)
      valign = gtk.Alignment(0, 1, 0, 0)
      vbox.pack_start(halign1)
		
      self.btn1 = gtk.Button("set")
      self.btn2 = gtk.Button("heading")
      self.btn3 = gtk.Button("day name")
      self.btn4 = gtk.Button("Both")
		
      hbox = gtk.HBox(True, 3)
      hbox.add(self.btn1)
      hbox.add(self.btn2)
      hbox.add(self.btn3)
      hbox.add(self.btn4)
		
      halign = gtk.Alignment(0.5, 0.5, 0, 0)
      halign.add(hbox)
		
      vbox.pack_start(halign, False, True, 10)
      self.add(vbox)
		
      self.btn1.connect("clicked", self.selectdate)
      self.btn2.connect("clicked", self.heading)
      self.btn3.connect("clicked", self.dayname)
      self.btn4.connect("clicked", self.bothflags)
		
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def heading(self, widget):
      self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING)
		
   def dayname(self, widget):
      self.cal.set_display_options(gtk.CALENDAR_SHOW_DAY_NAMES)
		
   def bothflags(self, widget):
      self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING|gtk.CALENDAR_SHOW_DAY_NAMES)
   def selectdate(self, widget):
      tp = self.cal.get_date()
      dialog = gtk.Dialog("My dialog",
      self,
      gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
      (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
		
      str1 = str(tp[0])
      str2 = str(tp[1]+1)
      str3 = str(tp[2])
		
      label = gtk.Label("Date selected:"+str3+"-"+str2+"-"+str1)
      dialog.vbox.add(label)
      label.show()
      res = dialog.run()
      dialog.destroy()

PyApp()
gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Календарь Демо

PyGTK — класс буфера обмена

Объект Clipboard содержит общие данные между двумя процессами или двумя виджетами одного и того же приложения. Gtk.Clipboard — это интерфейс высокого уровня для класса gtk.SelectionData.

Ниже приведен прототип конструктора gtk.Clipboard —

gtk.Clipboard(display,selction)

Здесь параметр отображения соответствует объекту gtk.gdk.Display, для которого должен быть создан или получен буфер обмена. По умолчанию это стандартное устройство вывода. Параметр выбора по умолчанию — CLIPBOARD, объект, представляющий интернированную строку.

PyGTK предоставляет удобную функцию для создания объекта буфера обмена со значениями по умолчанию.

gtk.clipboard.get()

Класс gtk.Clipboard имеет следующие методы —

  • Clipboard.store () — хранит где-то текущие данные буфера обмена, чтобы они оставались без изменений даже после выхода из приложения.

  • Clipboard.clear () — удаляет содержимое буфера обмена.

  • Clipboard.set_text (text) — устанавливает содержимое буфера обмена в строку.

  • Clipboard.request_text () — запрашивает содержимое буфера обмена как текст. Когда текст будет получен позже, будет вызван обратный вызов с данными, указанными в user_data . Подпись обратного вызова :

    • def callback (буфер обмена, текст, данные) — текст будет содержать текст, извлеченный из буфера обмена.

Clipboard.store () — хранит где-то текущие данные буфера обмена, чтобы они оставались без изменений даже после выхода из приложения.

Clipboard.clear () — удаляет содержимое буфера обмена.

Clipboard.set_text (text) — устанавливает содержимое буфера обмена в строку.

Clipboard.request_text () — запрашивает содержимое буфера обмена как текст. Когда текст будет получен позже, будет вызван обратный вызов с данными, указанными в user_data . Подпись обратного вызова :

def callback (буфер обмена, текст, данные) — текст будет содержать текст, извлеченный из буфера обмена.

В качестве демонстрации буфера обмена следующий код использует два TextViews и две кнопки на верхнем уровне gtk.Window. Кнопка «Установить» вызывает функцию on_set (), которая помещает текст из первого textView в буфер обмена.

buf = self.tv1.get_buffer()
text = buf.get_text(buf.get_start_iter(), buf.get_end_iter())
self.clipboard = gtk.clipboard_get()
self.clipboard.set_text(text)
self.clipboard.store()

При нажатии второй кнопки («извлечено») данные из буфера обмена извлекаются методом request_text () —

self.clipboard.request_text(self.readclipboard,        user_data = None)

Содержимое user_data отправляется в метод обратного вызова readclipboard (), который отображает его во втором текстовом представлении.

def readclipboard(self, clipboard, text, data):
   buffer = gtk.TextBuffer()
   buffer.set_text(text)
   self.tv2.set_buffer(buffer)

пример

Ниже приведен весь код для работы с буфером обмена —

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("Clipboard demo")
      self.set_size_request(300,200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      vbox = gtk.VBox(False, 5)
      self.tv1 = gtk.TextView()
		
      vbox.add(self.tv1)
      self.tv2 = gtk.TextView()
		
      vbox.add(self.tv2)
      hbox = gtk.HBox(True, 3)
		
      Set = gtk.Button("set")
      Set.set_size_request(70, 30)
		
      retrieve = gtk.Button("retrieve")
      hbox.add(Set)
      hbox.add(retrieve)
      halign = gtk.Alignment(1, 0, 0, 0)
      halign.add(hbox)
		
      vbox.pack_start(halign, False, False, 3)
      self.add(vbox)
      Set.connect("clicked", self.on_set)
      retrieve.connect("clicked", self.on_retrieve)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def on_set(self, widget):
      buf = self.tv1.get_buffer()
      text = buf.get_text(buf.get_start_iter(), buf.get_end_iter())
      self.clipboard = gtk.clipboard_get()
      self.clipboard.set_text(text)
      self.clipboard.store()
		
   def on_retrieve(self, widget):
      self.clipboard.request_text(self.readclipboard, user_data=None)
		
   def readclipboard(self, clipboard, text, data):
      buffer = gtk.TextBuffer()
      buffer.set_text(text)
      self.tv2.set_buffer(buffer)

PyApp()
gtk.main()

Приведенный выше код сгенерирует следующий вывод:

Демонстрация буфера обмена

PyGTK — класс линейки

Это базовый класс для горизонтальных (gtk.Hruler) и вертикальных (gtk.Vruler) линейок, которые полезны для отображения положения указателя мыши в окне. Маленький треугольник в линейке указывает на местоположение указателя.

Объекты линейки создаются с соответствующими конструкторами —

hrule = gtk.Hruler()
vrule = gtk.Vruler()

Следующие методы класса gtk.Ruler доступны для обоих производных классов:

  • Ruler.set_metric () — устанавливает единицу измерения. Предопределенные константы метрики: gtk.PIXELS (по умолчанию), gtk.INCHES и gtk.CENTIMETERS

  • Ruler.set_range () — устанавливает нижнюю и верхнюю границы, положение и максимальный размер линейки.

Ruler.set_metric () — устанавливает единицу измерения. Предопределенные константы метрики: gtk.PIXELS (по умолчанию), gtk.INCHES и gtk.CENTIMETERS

Ruler.set_range () — устанавливает нижнюю и верхнюю границы, положение и максимальный размер линейки.

В приведенном ниже примере горизонтальные и вертикальные линейки размещены над и слева от виджета gtk.TextView.

Измерение горизонтальной линейки в пикселях. Его минимальное и максимальное значения равны 0 и 400 соответственно. Он находится в верхнем ряду gtk.VBox.

hrule = gtk.HRuler()
hrule.set_metric(gtk.PIXELS)
hrule.set_range(0, 4,0,0.5)
vbox.pack_start(hrule)

Нижний ряд Vbox содержит HBox. Вертикальная линейка и виджет TextView, в который можно вводить многострочный текст, упакованы.

vrule=gtk.VRuler()
vrule.set_metric(gtk.PIXELS)
vrule.set_range(0, 4, 10, 0.5)
hbox.pack_start(vrule)

пример

Соблюдайте следующий код —

import gtk
class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("Ruler demo")
      self.set_size_request(400,400)
      self.set_position(gtk.WIN_POS_CENTER)
		
      vbox = gtk.VBox()
      tv = gtk.TextView()
      tv.set_size_request(350,350)
		
      hrule = gtk.HRuler()
      hrule.set_metric(gtk.PIXELS)
      hrule.set_range(0, 4,0,0.5)
		
      vbox.pack_start(hrule)
      hbox = gtk.HBox()
      vrule = gtk.VRuler()
		
      vrule.set_metric(gtk.PIXELS)
      vrule.set_range(0, 4, 10, 0.5)
		
      hbox.pack_start(vrule)
      halign = gtk.Alignment(0.5, 0.5, 0, 0)
      halign.add(tv)
		
      hbox.pack_start(halign, False, True, 10)
      vbox.add(hbox)
		
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()

PyApp()
gtk.main()

Вывод, сгенерированный вышеуказанной программой, напоминает документ MS Word —

Линейка Демо

PyGTK — Тайм-аут

Модуль gobject API PyGTK имеет полезную функцию для создания функции тайм-аута, которая будет вызываться периодически.

source_id = gobject.timeout_add(interval, function, …)

Второй аргумент — это функция обратного вызова, которую вы хотите вызывать после каждой миллисекунды, которая является значением первого аргумента — интервала. Дополнительные аргументы могут быть переданы в обратный вызов в виде данных функции.

Возвращаемое значение этой функции — source_id . Используя его, функция обратного вызова останавливается от вызова.

gobject.source_remove(source_id)

Функция обратного вызова должна возвращать True для продолжения повторения. Следовательно, его можно остановить, вернув False.

Две кнопки и две метки помещаются в окно верхнего уровня в следующей программе. Одна метка отображает увеличивающийся номер. Btn1 вызывает on_click, который устанавливает функцию тайм-аута с интервалом 1000 мс (1 секунда).

btn1.connect("clicked", self.on_click)

def on_click(self, widget):
   self.source_id = gobject.timeout_add(1000, counter, self)

Функция тайм-аута называется counter () . Это увеличивает число на этикетке после каждой 1 секунды.

def counter(timer):
   c=timer.count+1
   print c
   timer.count=c
   timer.lbl.set_label(str(c))
   return True

Функция обратного вызова на второй кнопке удаляет функцию тайм-аута.

btn2.connect("clicked", self.on_stop)
def on_stop(self, widget):
gobject.source_remove(self.source_id)

пример

Ниже приведен полный код для примера Timeout —

import gtk, gobject

def counter(timer):
      c = timer.count+1
      print c
      timer.count = c
      timer.lbl.set_label(str(c))
      return True
      class PyApp(gtk.Window):
		
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Timeout Demo")
      self.set_size_request(300, 200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      vbox = gtk.VBox(False, 5)
      hbox = gtk.HBox(True, 3)
		
      hb = gtk.HBox()
      lbl1 = gtk.Label("Counter: ")
		
      hb.add(lbl1)
      self.lbl = gtk.Label("")
      hb.add(self.lbl)
      valign = gtk.Alignment(0.5, 0.5, 0, 0)
      valign.add(hb)
      vbox.pack_start(valign, True, True, 10)
		
      btn1 = gtk.Button("start")
      btn2 = gtk.Button("stop")
		
      self.count = 0
      self.source_id = 0
		
      hbox.add(btn1)
      hbox.add(btn2)
		
      halign = gtk.Alignment(0.5, 0.5, 0, 0)
      halign.add(hbox)
		
      vbox.pack_start(halign, False, True, 10)
      self.add(vbox)
		
      btn1.connect("clicked", self.on_click)
      btn2.connect("clicked", self.on_stop)
		
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def on_click(self, widget):
      self.source_id = gobject.timeout_add(1000, counter, self)
		
   def on_stop(self, widget):
      gobject.source_remove(self.source_id)

PyApp()
gtk.main()

Когда выполнено, окно показывает две кнопки внизу. Число на метке будет периодически увеличиваться при нажатии на кнопку «Пуск», и оно прекращает увеличиваться при нажатии на кнопку «Стоп».

Соблюдайте вывод —

Timeout Demo

PyGTK — перетаскивание

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

Следующие шаги участвуют в настройке приложения с поддержкой перетаскивания.

Шаг 1 — Настройка исходного виджета.

Шаг 2 — метод drag_source_set () указывает целевые типы для операции перетаскивания.

widget.drag_source_set(start_button_mask, targets, info)

Шаг 3 — Аргумент start_button_mask указывает битовую маску кнопок, которая запускает операцию перетаскивания.

Шаг 4 — Целевой аргумент — это список кортежей этой структуры —

(target, flags, info)

Целевым аргументом является строка, представляющая тип перетаскивания, например text / plain или image / x-xpixmap.

Шаг 6 — Следующие флаги предопределены —

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

Шаг 7 — Ограничений не будет, так как флаг установлен в 0.

Если виджет не обязан выступать в качестве источника, его можно отключить —

widget.drag_source_unset()

Исходный сигнал испускает сигналы. В следующей таблице перечислены сигналы и их обратные вызовы.

drag_begin def drag_begin_cb (виджет, drag_context, данные):
drag_data_get def drag_data_get_cb (виджет, drag_context, selection_data, информация, время, данные):
drag_data_delete def drag_data_delete_cb (виджет, drag_context, данные):
drag_end def drag_end_cb (виджет, drag_context, данные):

Настройка виджета назначения

Метод drag_dest_set () указывает, какой виджет может получать перетаскиваемые данные.

widget.drag_dest_set(flags, targets, action)

Параметр flags может принимать одну из следующих констант:

gtk.DEST_DEFAULT_MOTION Это проверяет, соответствует ли перетаскивание списку возможных целей и действий этого виджета, а затем вызывает drag_status () в зависимости от ситуации.
gtk.DEST_DEFAULT_HIGHLIGHT Это рисует подсветку на этом виджете, пока перетаскивание поверх этого виджета
gtk.DEST_DEFAULT_DROP Когда происходит сброс, если перетаскивание соответствует списку возможных целей и действий этого виджета, вызовите drag_get_data () от имени виджета. Независимо от того, удачно ли выполнено удаление , вызовите drag_finish () . Если действие было перемещением, и перетаскивание было успешным, то для параметра удаления для параметра drag_finish () будет передано TRUE.
gtk.DEST_DEFAULT_ALL Если установлено, указывает, что все действия по умолчанию должны быть выполнены.

Цель — это список кортежей, содержащих информацию о цели. Аргумент actions представляет собой битовую маску или комбинацию одного или нескольких из следующих значений:

  • gtk.gdk.ACTION_DEFAULT
  • gtk.gdk.ACTION_COPY
  • gtk.gdk.ACTION_MOVE
  • gtk.gdk.ACTION_LINK
  • gtk.gdk.ACTION_PRIVATE
  • gtk.gdk.ACTION_ASK

Обработчик «drag-motion» должен определить, соответствуют ли данные перетаскивания, путем сопоставления целей назначения с целями gtk.gdk.DragContext и, необязательно, путем проверки данных перетаскивания путем вызова метода drag_get_data () . The gtk.gdk.DragContext . Метод drag_status ( ) должен быть вызван для обновления статуса drag_context .

Обработчик «drag-drop» должен определить совпадающую цель, используя метод drag_dest_find_target (), а затем запросить данные перетаскивания, используя метод drag_get_data () . Данные будут доступны в обработчике перетаскивания полученных данных.