Skip to content

Instantly share code, notes, and snippets.

@LuizArmesto
Created April 18, 2012 19:28
Show Gist options
  • Save LuizArmesto/2415937 to your computer and use it in GitHub Desktop.
Save LuizArmesto/2415937 to your computer and use it in GitHub Desktop.
Gtk.Entry personalizado dinamicamente
#!/usr/bin/env python
# -*- coding: utf-8 -*-
########################################################################
# #
# Licença: Este código é de uso livre, exceto para criar interfaces #
# horríveis que destoem e comprometam a coerência visual do ambiente #
# de trabalho do usuário ;) #
# #
########################################################################
# Exemplo para GTK+ 3
from gi.repository import Gtk
class Main(object):
def __init__(self):
# Criamos um css com o estilo que queremos
css_data = '''
GtkEntry.feio-de-doer {
color: white; /* Cor do texto */
background-image: -gtk-gradient( /* Gradiente da caixa */
linear, left top, left bottom,
from(#b00), to(#f00)
);
border-radius: 25;
}
GtkEntry.feio-de-doer:focused {
color: black; /* Cor do texto com foco */
background-image: -gtk-gradient( /* Gradiente da caixa com foco */
linear, left top, left bottom,
from(#bb0), to(#ff0)
);
}
GtkEntry.feio-de-doer:selected,
GtkEntry.feio-de-doer:selected:focused {
color: white; /* Cor do texto da seleção */
background-color: blue; /* Cor de fundo da seleção */
}
'''
# Criamos um CssProvider e carregamos o css nele
css_provider = Gtk.CssProvider()
css_provider.load_from_data(css_data);
self.window = Gtk.Window()
self.window.set_title('Entry Personalizado')
self.window.connect('destroy', Gtk.main_quit, 'WM destroy')
self.window.set_default_size(500, 70)
vbox = Gtk.VBox()
self.window.add(vbox)
self.entry_normal = Gtk.Entry()
self.entry_normal.set_text(u'Este está normal')
vbox.add(self.entry_normal)
self.entry_colorido = Gtk.Entry()
self.entry_colorido.set_text(u'Este está lindão... só que não!!1!!1 :P')
vbox.add(self.entry_colorido)
self.checkbutton = Gtk.CheckButton()
self.checkbutton.set_label(U'Entry colorido');
self.checkbutton.connect('toggled', self.toggle_class)
vbox.add(self.checkbutton)
# Pegamos o StyleContext do Entry que queremos personalizar
# Obs.: não use mais o Style para personalizações, ele está
# "deprecated". Sem contar que agora ficou tudo mais fácil
context = self.entry_colorido.get_style_context()
# Incluimos o CssProvider no StyleContext
context.add_provider(css_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
# Configuramos a classe css e pronto
#context.add_class('feio-de-doer')
self.window.show_all()
def toggle_class(self, widget):
context = self.entry_colorido.get_style_context()
# Alterna a classe
if context.has_class('feio-de-doer'):
context.remove_class('feio-de-doer')
else:
context.add_class('feio-de-doer')
# Faz com que o widget seja redesenhado
self.entry_colorido.queue_draw()
print context.has_class('feio-de-doer')
if __name__ == '__main__':
Main()
Gtk.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment