Exibir e editar texto e imagens em um aplicativo rápido

1

Eu preciso poder exibir imagens e texto (imagens redimensionáveis e editáveis em texto). Eu estava pensando que talvez uma coisa do tipo HTML pudesse fazer isso. Para um exemplo muito ruim, como funciona um processador de texto. Digitando e editando texto e colando e editando imagens.

Obrigado antecipadamente, desculpe pela tarefa impossível (para mim).

EDITAR: Eu também gostaria de poder salvar isso de alguma forma.

    
por njallam 21.06.2012 / 17:01

1 resposta

1

Você pode realmente fazer isso usando um widget TextView. Primeiro você deve definir editable para true:

textview.set_editable(true)

Você precisará obter seu textbuffer, que são os dados das textviews:

buffer = textview.get_buffer()

Em seguida, usando esse buffer, você pode obter e definir os dados nele. para obter o texto atualmente no uso do buffer:

buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), false)

O primeiro e o segundo argumentos são o intervalo para obter o texto, neste caso tudo fora. O último argumento especifica se você deseja obter caracteres ocultos, neste caso, false. Para inserir texto, você pode usar o seguinte:

buffer.insert(buffer.get_end_iter(), "Sample text")

O primeiro argumento especifica onde inserir o texto, neste caso no final. o segundo argumento é o texto a ser inserido. Para substituir todos os dados no buffer, você pode usar:

buffer.set_text("Sample text")

Isso substituirá tudo no buffer por "Texto de amostra". Para inserir uma imagem você precisa criar um pixbuf para fazer isso, use o seguinte:

pixbuf = gtk.gdk.pixbuf_new_from_file(filename)

Para redimensionar o uso do pixbuf:

pixbuf.scale_simple(dest_width, dest_height, gtk.gdk.INTERP_BILINEAR)

Os dois primeiros argumentos são a nova largura e altura, o terceiro argumento é o tipo de interpolação que controla como ele é dimensionado (existem quatro tipos que podem ser encontrados aqui ). Você pode então adicionar este pixbuf ao buffer usando:

buffer.insert_pixbuf(buffer.get_end_iter(), pixbuf)

Isto irá inserir uma imagem no final do buffer.

Você também pode fazer coisas como adicionar widgets, definir margens, copiar e colar da área de transferência, inserir no cursor, etc., mas pode ver os links abaixo para isso.

Editar : Para um salvamento / carregamento formatado, você pode usar o método de serialização de textbuffers. Primeiro você deve usar o método register_serialize_tagset ():

format = buffer.register_serialize_tagset()

Em seguida, você pode usar o método serialize para obter os dados serializados:

data buffer.serialize(buffer, format, buffer.get_start_iter(), buffer.get_end_iter())

Isso retornará os dados no formato interno do textbuffer, que você pode salvar em um arquivo. Para carregar estes dados, primeiro chame o método register_deserialize_tagset () do textbuffer:

format = emptyBuffer.register_deserialize_tagset()

Então você pode carregar os dados usando o método deserialize ():

emptyBuffer.deserialize(emptyBuffer, format, emptyBuffer.get_end_iter(), data)

Isso carregará os dados no textbuffer.

Edit2 : se você quiser que o usuário arraste para mover e redimensionar, carregue o pixbuf em um widget de imagem, o widget de imagem em uma caixa de evento, a caixa de evento em uma âncora filha para colocar na visualização de texto, você pode manipular x eventos para esse widget e escrever código nos manipuladores para mover ou redimensionar a imagem.

Recursos:

por Sam Bickley 22.06.2012 / 05:52