8. Entry

Entry são widgets que permitem que o usuário insira texto. Você pode alterar o conteúdo com o método Gtk.Entry.set_text() e ler o conteúdo atual com o método Gtk.Entry.get_text(). Você também pode limitar o número de caracteres que a Entrada pode receber chamando Gtk.Entry.set_max_length().

Ocasionalmente, você pode querer tornar um widget de Entrada somente leitura. Isto pode ser feito passando False para o método Gtk.Entry.set_editable().

Os widgets de entrada também podem ser usados para recuperar senhas do usuário. É uma prática comum ocultar os caracteres digitados na entrada para evitar revelar a senha a terceiros. Chamando Gtk.Entry.set_visibility() com False fará com que o texto fique oculto.

Gtk.Entry tem a capacidade de exibir informações de progresso ou atividade por trás do texto. Isso é semelhante ao widget Gtk.ProgressBar e é comumente encontrado em navegadores web para indicar quanto de um download de página foi concluído. Para fazer uma entrada exibir tais informações, use Gtk.Entry.set_progress_fraction(), Gtk.Entry.set_progress_pulse_step() ou Gtk.Entry.progress_pulse().

Além disso, uma entrada pode mostrar ícones em ambos os lados da entrada. Esses ícones podem ser ativados clicando, podem ser configurados como fonte de arrastar e podem ter dicas de ferramentas. Para adicionar um ícone, use Gtk.Entry.set_icon_from_icon_name() ou uma das várias outras funções que definem um ícone a partir de um nome de ícone, um pixbuf ou tema de ícone. Para definir uma dica de ferramenta em um ícone, use Gtk.Entry.set_icon_tooltip_text() ou a função correspondente para marcação.

8.1. Exemplo

_images/entry_example.png
 1import gi
 2
 3gi.require_version("Gtk", "3.0")
 4from gi.repository import Gtk, GLib
 5
 6
 7class EntryWindow(Gtk.Window):
 8    def __init__(self):
 9        super().__init__(title="Entry Demo")
10        self.set_size_request(200, 100)
11
12        self.timeout_id = None
13
14        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
15        self.add(vbox)
16
17        self.entry = Gtk.Entry()
18        self.entry.set_text("Hello World")
19        vbox.pack_start(self.entry, True, True, 0)
20
21        hbox = Gtk.Box(spacing=6)
22        vbox.pack_start(hbox, True, True, 0)
23
24        self.check_editable = Gtk.CheckButton(label="Editable")
25        self.check_editable.connect("toggled", self.on_editable_toggled)
26        self.check_editable.set_active(True)
27        hbox.pack_start(self.check_editable, True, True, 0)
28
29        self.check_visible = Gtk.CheckButton(label="Visible")
30        self.check_visible.connect("toggled", self.on_visible_toggled)
31        self.check_visible.set_active(True)
32        hbox.pack_start(self.check_visible, True, True, 0)
33
34        self.pulse = Gtk.CheckButton(label="Pulse")
35        self.pulse.connect("toggled", self.on_pulse_toggled)
36        self.pulse.set_active(False)
37        hbox.pack_start(self.pulse, True, True, 0)
38
39        self.icon = Gtk.CheckButton(label="Icon")
40        self.icon.connect("toggled", self.on_icon_toggled)
41        self.icon.set_active(False)
42        hbox.pack_start(self.icon, True, True, 0)
43
44    def on_editable_toggled(self, button):
45        value = button.get_active()
46        self.entry.set_editable(value)
47
48    def on_visible_toggled(self, button):
49        value = button.get_active()
50        self.entry.set_visibility(value)
51
52    def on_pulse_toggled(self, button):
53        if button.get_active():
54            self.entry.set_progress_pulse_step(0.2)
55            # Call self.do_pulse every 100 ms
56            self.timeout_id = GLib.timeout_add(100, self.do_pulse, None)
57        else:
58            # Don't call self.do_pulse anymore
59            GLib.source_remove(self.timeout_id)
60            self.timeout_id = None
61            self.entry.set_progress_pulse_step(0)
62
63    def do_pulse(self, user_data):
64        self.entry.progress_pulse()
65        return True
66
67    def on_icon_toggled(self, button):
68        if button.get_active():
69            icon_name = "system-search-symbolic"
70        else:
71            icon_name = None
72        self.entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, icon_name)
73
74
75win = EntryWindow()
76win.connect("destroy", Gtk.main_quit)
77win.show_all()
78Gtk.main()