Created
April 18, 2012 19:28
-
-
Save LuizArmesto/2415937 to your computer and use it in GitHub Desktop.
Gtk.Entry personalizado dinamicamente
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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