Комбинированный список (gtk.Combo)

Заметка

Виджет Combo считается устаревшим в PyGTK 2.4 и выше.

В новых приложениях используйте ComboBox и ComboBoxEntry.

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

Combo имеет две основные части, о которых вам стоит помнить: entry и list. Доступ к ним осуществляется с использованием атрибутов:

  combo.entry

  combo.list

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

  combo = gtk.Combo()

Теперь, если вам нужно настроить строку ввода в Combo, вы можете сделать это, управляя полем ввода напрямую:

  combo.entry.set_text(text)

Для выбора значений из выпадающего list, можно использовать метод:

  combo.set_popdown_strings(strings)

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

Здесь обычный фрагмент кода для создания списка опций:

  slist = [ "String 1", "String 2", "String 3", "String 4" ]

  combo.set_popdown_strings(slist)

Теперь вы можете настроить работающий комбинированный список. Есть несколько тонкостей его поведения, которые вы можете изменить. Выполняется это с помощью методов:

  combo.set_use_arrows(val)

  combo.set_use_arrows_always(val)

  combo.set_case_sensitive(val)

Метод set_use_arrows() позволяет пользователю менять значение в поле, используя стрелки вверх/вниз, когда val установлен в TRUE. Это не затрагивает список, но заменяет текущий текст в поле ввода следующей записью из списка. Это происходит с помощью поиска по списку пункта, отвечающего текущему значению поля ввода, и выбора предыдущего/следующего значения соответствующе. Обычно в поле ввода стрелки используются для смены фокуса (вы всегда можете делать это и с помощью Tab). Заметьте, что когда текущий элемент находится в конце списка, то нажатие на стрелку вниз произведёт смену фокуса (также как и нажатие стрелки вверх и первом элементе). Если текущее значение поля ввода entry не находится в списке, то метод set_use_arrows() запрещён.

Метод set_use_arrows_always() при значении val равному TRUE, похожим образом позволяет пользоваться стрелками для прокрутки записей из списка, за тем исключением, что он замыкает пункты списка в цикл, и использование стрелок вверх и вниз никогда не меняют фокус.

Метод set_case_sensitive() выбирает будет ли GTK+ искать записи в регистро-зависимой манере. Это используется когда к виджету Combo приходит запрос на поиск значения из списка, используя текущий ввод в поле. Этот поиск может осуществлятся в регистро-зависимой, либо независимой манере, за что отвечает настройка этого метода. Виджет Combo также может дополнять текущий ввод по нажатию комбинации клавиш MOD-1-Tab. MOD-1 часто назначен на клавишу Alt, утилитой xmodmap. Заметим, что некоторые менеджеры окон также используют эту комбинацию, и запрещают её использование в GTK.

Теперь вы имеем комбинированный список, выглядящий и работающий так, как нам нужно, осталось только научиться получать данные из него. Это весьма просто. Большую часть времени вам нужно следить за данными в поле. Доступ к полю получить легко, с помощью combo.entry. Две главные вещи, которые вам нужно сделать – это подключить сигнал “activate”, который показывает что пользователь нажал на кнопку Return или Enter, и прочитать текст. Первое выполняется с помощью чего-то подобного:

  combo.entry.connect("activate", my_callback, my_data)

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

  string = combo.entry.get_text()

Это почти всё о комбинированном списке. Также есть метод:

  combo.disable_activate()

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


Предыдущая страница На уровень выше  Следующая страница
9.10.Кнопка-счётчик (gtk.SpinButton) К оглавлению  9.12. Календарь (gtk.Calendar)

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

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

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