Uma ScrolledWindow é uma área criada dentro da tela que terá "barras de rolagem" para que se veja o que está dentro dela, mesmo que não apareça por falta de área visível.
Repare que as barras de rolagem não têm aqueles "botõezinhos" ou um "cursor" para ser arrastado. No XO, usa-se as teclas de "seta-para-cima" etc. para a rolagem
Esse objeto serve para colocar, por exemplo, relatórios que são maiores que a área da tela. (Lembramos que, para uma boa edição de colunas, pode-se usar um tipo de letra com espaçamento uniforme como o CourierNew).
Dentro da ScrolledWindow se coloca um Label que conterá um String. Temos então que "editar" esse String colocando, por exemplo, o scape "\n" para ir para outra linha etc.
Um objeto ScrolledWindow pode ser criado com, por exemplo:
self.sw = gtk.ScrolledWindow()
Para adicionar esse objeto à tela do XO, numa dada posição, usamos normalmente um objeto Fixed (visto em aula anterior):
Os métodos de ScrolledWindow são:
show()
hide()
destroy()
set_size_request(largura, altura)
Pode ser maior ou menor que o espaço para a quantidade de dígitos e linhas recebíveis.
set_border_width(n)
add_with_viewport(objeto-a-ser-incluido)
Na maioria da vezes o objeto-a-ser-incluido é um Label que contém um String. Mas pode ser qualquer outro (Button, Image etc.).
set_policy( política-da-barra-horizontal,política-da-barra-vertical)
Por "política" queremos dizer: se vai ou não ter barra de rolagem e se ela aparece sempre ou só quando nescessário. As políticas são: gtk.POLICY_ALWAYS, gtk.POLICY_AUTOMATIC ou gtk.POLICY_NEVER.
Se o texto é menor, em altura, que a janela, ele é centralizado.
No exercício colocamos uma linha maior na horizontal para a barra, com gtk.POLICY_AUTOMATIC, aparecer.
Claro que esse código tem que vir dentro de uma Classe etc. etc. como já mostramos.
#...
def __init__(self):
Activity.__init__(self)
#Definindo o tipo e tamanho das letras
gtk.settings_get_default().props.gtk_xft_dpi *= 2
#Criando base para layout
self.fix = gtk.Fixed()
self.add(self.fix)
self.fix.show()
#Criando ScrolledWindow
self.sw = gtk.ScrolledWindow()
self.sw.set_border_width(10)
self.sw.set_size_request(300,200)
self.sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_ALWAYS)
self.fix.put(self.sw, 200,200)
self.sw.show()
#Criando Label
self.lb = gtk.Label()
#Colocando o Label dentro da janela
self.sw.add_with_viewport(self.lb)
#Colocando linhas dentro do Label
self.lb.set_text("Texto de teste dentro de scrolled-window\nSegunda linha\nMais uma linha\nQuarta linha\nEtc.")
self.lb.show()
É claro que a colocação de textos dentro da ScrolledWindow pode ser dinâmica, a partir da leitura em um Banco de Dados, por exemplo. Quando tratarmos de Banco de Dados (o XO vem com o SQLite) vamos mostrar um exemplo disso.
LIÇÂO ANTERIOR PRÓXIMA LIÇÂO ÍNDICE HOMEPAGE