Mostrando postagens com marcador português. Mostrar todas as postagens
Mostrando postagens com marcador português. Mostrar todas as postagens

Integração GTK e Cairo Para Criação de Aplicação de Pintura Digital

Há algumas semanas iniciei estudos sobre como usar Python, GTK e Cairo para desenvolver aplicativos de pintura digital. Li sobre a arquitetura e o fluxo de programas como Krita, GIMP, MyPaint e Clip Studio Paint, especialmente sua interface, o modelo dos pincéis e o pipeline de renderização. Embora GTK + Cairo seja minha escolha principal, também é possível criar soluções similares com Qt (usando PySide em Python ou C++ nativo).

Para montar essa base, utilizei dois recursos fundamentais:

  1. Gtk.DrawingArea – fornece a “tela” onde tudo é desenhado e captura eventos de mouse/mesa digitalizadora.

  2. Cairo – cria e gerencia os buffers de desenho, permitindo implementar o pincel e as operações gráficas.

No Windows, instalei o MSYS2 para obter o GCC, Python, GTK, Cairo e PyGObject; depois empacotei o executável com PyInstaller. No Linux, basta usar o gerenciador de pacotes (por exemplo, apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0) para ter tudo pronto.


Introdução ao GTK + Cairo

  • GTK (GIMP Toolkit) é a biblioteca de GUI: janelas, botões, menus e áreas de desenho (Gtk.DrawingArea).

  • Cairo é a biblioteca de gráficos 2D vetoriais: linhas, formas, texto e imagens, com antialiasing e transparência, via cairo.Context.

  • Integração: sempre que a DrawingArea precisa ser redesenhada, o GTK emite o sinal "draw" e passa um contexto Cairo (cr) para sua função de callback. Você desenha no cr, e o GTK exibe o resultado.

Fluxo resumido

  1. Crie um widget Gtk.DrawingArea.

  2. Conecte o sinal "draw" ao seu método de desenho.

  3. No callback, use o cairo.Context para pintar formas, cores e texturas.

  4. Chame queue_draw() sempre que precisar atualizar a tela (por clique ou movimento).


Exemplo minimalista em Python

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk
import cairo

class AreaDesenho(Gtk.DrawingArea):
    def __init__(self):
        super().__init__()
        self.set_size_request(400, 300)
        self.pontos = []
        self.set_events(Gdk.EventMask.BUTTON_PRESS_MASK |
                        Gdk.EventMask.POINTER_MOTION_MASK)
        self.connect("draw", self.on_draw)
        self.connect("button-press-event", self.on_press)
        self.connect("motion-notify-event", self.on_move)

    def on_draw(self, widget, cr):
        # Limpa o fundo
        cr.set_source_rgb(1, 1, 1)
        cr.paint()
        # Desenha traços
        cr.set_source_rgb(0, 0, 0)
        cr.set_line_width(2)
        for p1, p2 in zip(self.pontos, self.pontos[1:]):
            cr.move_to(*p1)
            cr.line_to(*p2)
        cr.stroke()
        return False

    def on_press(self, widget, event):
        self.pontos.append((event.x, event.y))
        self.queue_draw()

    def on_move(self, widget, event):
        if event.state & Gdk.ModifierType.BUTTON1_MASK:
            self.pontos.append((event.x, event.y))
            self.queue_draw()

class JanelaDesenho(Gtk.Window):
    def __init__(self):
        super().__init__(title="Desenho Digital")
        self.set_default_size(400, 300)
        self.connect("destroy", Gtk.main_quit)
        self.add(AreaDesenho())

JanelaDesenho().show_all()
Gtk.main()

Como funciona

  1. AreaDesenho herda de Gtk.DrawingArea e armazena pontos do mouse.

  2. No evento "draw", pinta o fundo e traça linhas entre os pontos coletados.

  3. Eventos de clique e arrasto (button-press-event e motion-notify-event) registram os pontos e solicitam redesenho com queue_draw().


Referências

Gostou deste material e do conteúdo do blog considere apoiar o desenvolvimento do mesmo visitando nossa página "Como Contribuir". Também é possível contribuir divulgando e comentando ajudando a desenvolver e melhorar o conteúdo aqui disponível. Post comumente compartilhado no mural Apoiase da minha página Dimensão Alfa
 
 
Agradece, 
 
Wandeson Ricardo  

Questão Matemática - Geometria Analítica - 23-04-25 #20

 

 

(Mais conteúdo em Dimensão Alfa no Youtube e em www.dimensaoalfa.com.br )

*Dicas Amazon [Merchandise/Publi]*

Livro Sugerido: Geometria Analítica, Boulos https://amzn.to/42uSDr2

Promoções Vários https://amzn.to/4lJLRoK 



1. Tablet Samsung S6 Lite (64GB, 4GB RAM, Tela 10.4')  https://amzn.to/3P4Ba0J

2. Tablet Samsung S9 (10.9", Wifi, 128 GB, 6 GB RAM) https://amzn.to/4gfR7NF

3. Smartphone Samsung Galaxy A15 4GB de RAM 128GB de Armazenamento https://amzn.to/3BL0eH5

4. Smartphone Samsung Galaxy A15 4G de RAM 256GB de Armazenamento https://amzn.to/3DpDD3x

5. Mesa Wacom ctl-472  https://amzn.to/4fAA5Jd

6. Notebook Lenovo Gaming i3 https://amzn.to/3Dw8qf2

7. Notebook Lenovo IdeaPad 1i i7-1255U 12GB 512GB 15.6" W11  https://amzn.to/4fwSoPh

8. Mesa de Som Voik MSV-502 BT https://amzn.to/3WkN4aZ

9. Livro "O Homem Que Calculava", Malba Tahan https://amzn.to/41PBUi9;

10. Livro "O Último Teorema de Fermat" https://amzn.to/4fBObtx

[ Sua compra através dos links de afiliados do canal acaba ajudando o projeto através da comissão gerada pelas vendas na plataforma Amazon. ]

Resolução Questão de Teste de Geometria Analítica UFPE 2025

UFPE Geometria Analítica Teste 2025

 Na última sexta-feira passada fiz teste de Geometria Analítica, assim, gostaria de compartilhar com vocês para que deseja praticar e estudar.

 

Meu canal Youtube sobre matemática e informática Dimensão Alfa

Estamos usando como referência o livro de Geometria Analítica do Boulos.

 

Dicas 

 

 *Como Apoiar meu Trabalho*

Informações de Como apoiar https://wsricardo.blogspot.com/p/apoie-como-contribuir.html

Doação PIX ( Canal e Blog): wsricardo13@gmail.com

*Dicas Amazon [Merchandise/Publi]*

0. Vários Itens Amazon https://amzn.to/3ZOJk2q

1. Tablet Samsung S6 Lite (64GB, 4GB RAM, Tela 10.4')  https://amzn.to/3P4Ba0J

2. Tablet Samsung S9 (10.9", Wifi, 128 GB, 6 GB RAM) https://amzn.to/4gfR7NF

3. Smartphone Samsung Galaxy A15 4GB de RAM 128GB de Armazenamento https://amzn.to/3BL0eH5

4. Smartphone Samsung Galaxy A15 4G de RAM 256GB de Armazenamento https://amzn.to/3DpDD3x

5. Mesa Wacom ctl-472  https://amzn.to/4fAA5Jd

6. Notebook Lenovo Gaming i3 https://amzn.to/3Dw8qf2

7. Notebook Lenovo IdeaPad 1i i7-1255U 12GB 512GB 15.6" W11  https://amzn.to/4fwSoPh

8. Mesa de Som Voik MSV-502 BT https://amzn.to/3WkN4aZ

9. Livro "O Homem Que Calculava", Malba Tahan https://amzn.to/41PBUi9;

10. Livro "O Último Teorema de Fermat" https://amzn.to/4fBObtx

[ Sua compra através dos links de afiliados do canal acaba ajudando o projeto através da comissão gerada pelas vendas na plataforma Amazon. ]



Quando EU Não Te Tinha - Fernando Pessoa

Problemas Matemáticos - 04/11/2024

 Problemas Matemáticos 

[ Álgebra Linear, Geometria Analítica

 

1. Seja $V$ um espaço vetorial de dimensão finita sobre o conjunto dos reais, dados os vetores ortonormais, não nulos, $ u, v \in V$. Determine $|| u + v ||^2$. 

[ Com $|| x ||$ denota-se a "norma" do vetor $x$. $|| x || = \sqrt{x_1^2 + x_2^2 + .... + x_n^2 }$ , $x = ( x_1, x_2, ..., x_n) $. ]

 

 

Resposta

Problemas Matemáticos Diários - 03/11/2024

 Problema anteriormente compartilhado em meu canal "Dimensão Alfa" no Youtube.


Problemas Matemáticos

[ Álgebra Linear ]

 1. Seja $V$ um espaço vetorial de dimensão finita sobre o conjunto dos reais, dados vetores não-nulos $u, v  \in V$. Qual condição necessária e suficiente para que tenhamos $|| u + v ||^2 = || u ||^2 + || v ||^2$ . Considere $|| x ||$ a norma, o comprimento, de um vetor $x \in V$ com definição usual $|| x || = \sqrt{ x_1^2 + x_2^2 + ... + x_n^2  }$. 

 

Resposta

Problemas Matemáticos 12 - 07 - 2024

 1. Dada a função real $ f(x) = 2e^{a \sqrt{x^2+3} } $ e constante $ a \in R $ encontre a derivada de f. 

( $e$ -> a constante de Euler )

 


 

Para mais questões e conteúdos acompanhe meu canal Dimensão Alfa. Para saber como apoiar e ajudar-me a manter a criação de materiais e conteúdos visite página "Apoie Como Contribuir" e acompanhe-me nessa jornada.

Jornalismo & Computação




Há alguns anos me deparei com o uso da programação para raspagem de dados na internet seja por meio de APIs ou simplesmente varrendo páginas e páginas de HTML. O assunto me pareceu bem interessante e uma forma de praticar. Logo depois me deparei com uso dessas técnicas para áreas diversas e segmentos como jornalismo ou mesmo para Analise de Dados e trabalhos de pesquisa em machine learning, um ramo interessantíssimo da inteligência artificial. Assim pensei que poderia unir meu gosto pela programação com a matemática e quem sabe até a arte. 

Com a chegada de tecnologias como GPT, "generative pre-trained transformer", usado no chatGPT da openAI por exemplo bem como o "Stable Difusion" usado para geração de imagens comecei a imaginar as possibilidades e achei bem curioso o assunto. Claro que meu arcabouço ferramental técnico em matemática e computação ainda não me permitem desenvolver programas dentro destes tópicos. Considero que estes assuntos devem ser visto de forma cautelosa e mais rigorosa distante dos ruídos das grandes mídias e redes sociais para afastar-se da euforia e compreender que essas tecnologias tem suas limitações e se aplicam a problemas e situações especificas e que nem sempre entregarão os melhores resultados possíveis.

Uma das possibilidades que vi envolvendo as raspagem de dados, analise e machine learning foi acessando dados públicos do governo para analisar gastos por exemplo, como fiz para fins de estudos básicos e coloquei em meu repositório github neste link https://github.com/wsricardo/eda-tcs, onde é usados dados de contas do senado brasileiro como gastos de seus membros.
Acredito que essas tecnologias tem papel fundamental na democratização e acesso a informação provendo a população melhores recursos para tomadas de decisões quanto ao futuro de sua vida, empreendimentos e país. 

Recentemente, assim, resolvi criar um canal que usando um bot e crawler (agregador) de notícias que escrevi faz varredura em alguns portais e salva links de artigos jornalísticos para futuras consultas e os entrega em atualizações diárias em um canal do Telegram. No momento estou com mais de 1500 links de notícias salvos distribuídos em arquivos json. Acabo por usar estes quando necessito buscar algum tópico para criar meus cartuns, como o que publiquei recentemente sobre o "arcabouço fiscal". Estes projetos contudo são humildes e de fins didáticos servindo-me para estudo e ferramenta a auxiliar-me em algumas coisas.

Deixo abaixo alguns links. Outros são possíveis serem encontrados em meu Github ou aqui mesmo no blog.

Agradece ao leitor,
WSRicardo


Links

2. EDA-TCS (Acessando dados abertos sobre gastos do senado brasileiro).



Desafio e Projetos em Programação de Computador



 O site 7DaysOfCode disponibiliza lista de projetos guiados e didáticos com finalidade de ensinar determinados tópicos dentro da tecnologia e programação através da construção de soluções. Os projetos vão dos simples ao intermediário e avançado envolvendo sistemas web, criação de sites, soluções de machine learning e analise de dados entre outros conteúdos.

Os desafios disponibilizados no site 7Days Of Code são enviados diariamente por email após usuário cadastrar-se em um dos desafios.

Imersão Sobre Inteligência Artificial Gratuita

 

Imersão Inteligência Aritificial

A "Alura" anunciou recentemente uma imersão em inteligência artificial gratuita para quem deseja aprender mais sobre tecnologias e possibilidades dentro da área. Para quem tem curiosidade por tecnologia ou se interessar pelo universo da tecnologia e da programção é uma boa oportunidade de encontrar materiais e aprender conteúdos de forma gratuita. Aulas vão do dia 19 até 23 de Junho. Abaixo deixo link.

Veja mais em Alura Imersão IA