Поле ввода текста (gtk.Entry)

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

Функция создания виджета Entry:

  entry = gtk.Entry(max=0)

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

Максимальная длина строки может быть изменена с помощью метода:

  entry.set_max_length(max)

Следующий метод меняет текст виджета Entry.

  entry.set_text(text)

Метод set_text() устанавливает содержимое виджета Entry на text, заменяя текущее содержимое. Заметим, что класс Entry осуществляет интерфейс Editable (да, gobject поддерживает интерфейсы в стиле Java), который содержит большее количество функций для управления содержимым. Например метод:

  entry.insert_text(text, position=0)

Вставляет text в заданную позицию в entry.

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

  text = entry.get_text()

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

  entry.set_editable(is_editable)

Этот метод позволяет переключать статус разрешения редактирования виджета Entry с помощью передачи значения TRUE or FALSE в аргументе is_editable.

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

  entry.set_visibility(visible)

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

  entry.select_region(start, end)

Если мы хотим получать уведомление, когда пользователь вводит текст, мы можем подключать сигналы “activate” или “changed”. Activate происходит при нажатии пользователем кнопки Enter. Changed происходит при любом изменении символа, т.е. для каждого вводимого или удаляемого символа.

Пример entry.py показывает использование полей ввода. Рисунок 9.10, “Пример поля ввода” показывает результат запуска программы:

Рисунок 9.10. Пример поля ввода

Entry Example

Исходный код entry.py:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# example entry.py

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

class EntryExample:
    def enter_callback(self, widget, entry):
        entry_text = entry.get_text()
        print "Entry contents: %s\n" % entry_text

    def entry_toggle_editable(self, checkbutton, entry):
        entry.set_editable(checkbutton.get_active())

    def entry_toggle_visibility(self, checkbutton, entry):
        entry.set_visibility(checkbutton.get_active())

    def __init__(self):
        # Создаём новое окно
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_size_request(250, 100)
        window.set_title("GTK Entry")
        window.connect("delete_event", lambda w,e: gtk.main_quit())

        vbox = gtk.VBox(False, 0)
        window.add(vbox)
        vbox.show()

        entry = gtk.Entry()
        entry.set_max_length(50)
        entry.connect("activate", self.enter_callback, entry)
        entry.set_text("привет")
        entry.insert_text(" мир", len(entry.get_text()))
        entry.select_region(0, len(entry.get_text()))
        vbox.pack_start(entry, True, True, 0)
        entry.show()

        hbox = gtk.HBox(False, 0)
        vbox.add(hbox)
        hbox.show()
                                  
        check = gtk.CheckButton("Редактируемое\nполе")
        hbox.pack_start(check, True, True, 0)
        check.connect("toggled", self.entry_toggle_editable, entry)
        check.set_active(True)
        check.show()
    
        check = gtk.CheckButton("Видимые\nсимволы")
        hbox.pack_start(check, True, True, 0)
        check.connect("toggled", self.entry_toggle_visibility, entry)
        check.set_active(True)
        check.show()
                                   
        button = gtk.Button(stock=gtk.STOCK_CLOSE)
        button.connect("clicked", lambda w: gtk.main_quit())
        vbox.pack_start(button, True, True, 0)
        button.set_flags(gtk.CAN_DEFAULT)
        button.grab_default()
        button.show()
        window.show()

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    EntryExample()
    main()
Предыдущая страница На уровень выше  Следующая страница
9.8. Строка состояния (gtk.StatusBar) Оглавление  9.10. Кнопка-счётчик (gtk.SpinButton)

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

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

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