<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Core Code &#187; pygtk</title>
	<atom:link href="http://corecode.wordpress.com/category/python/pygtk/feed/" rel="self" type="application/rss+xml" />
	<link>http://corecode.wordpress.com</link>
	<description></description>
	<lastBuildDate>Thu, 03 Dec 2009 23:46:53 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='corecode.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/501714ae3b790583f2bb3786bef3c5cb?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Core Code &#187; pygtk</title>
		<link>http://corecode.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://corecode.wordpress.com/osd.xml" title="Core Code" />
		<item>
		<title>Três vezes GTK</title>
		<link>http://corecode.wordpress.com/2008/05/22/tres-vezes-gtk/</link>
		<comments>http://corecode.wordpress.com/2008/05/22/tres-vezes-gtk/#comments</comments>
		<pubDate>Thu, 22 May 2008 21:17:49 +0000</pubDate>
		<dc:creator>leonidaskirotawa</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Gtk]]></category>
		<category><![CDATA[PHP-Gtk2]]></category>
		<category><![CDATA[pygtk]]></category>

		<guid isPermaLink="false">http://corecode.wordpress.com/?p=15</guid>
		<description><![CDATA[Há muito tempo atrás quando mal conhecia o que eram GUI&#8217;s, comecei a estudar algo chamado Tk, mas precisamente Tcl/Tk.  Comecei a estudar esta linguagem quando vi que o aMSN era todo feito nela.  Minha ambição era criar um aMSN ou melhora-lo (hehe),  mas infelizmente faculdade rouba  nosso tempo, tempo no [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=corecode.wordpress.com&blog=3748115&post=15&subd=corecode&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Há muito tempo atrás quando mal conhecia o que eram GUI&#8217;s, comecei a estudar algo chamado Tk, mas precisamente Tcl/Tk.  Comecei a estudar esta linguagem quando vi que o aMSN era todo feito nela.  Minha ambição era criar um aMSN ou melhora-lo (hehe),  mas infelizmente faculdade rouba  nosso tempo, tempo no qual poderia-mos está aprendendo sozinho, mas temos que tirar a nota X pra poder passar, etc.  Mas o que raios esse papo tem haver com GTk?  Acho que nada, foi só pra introduzir o artigo (hehe), mas espere! Tem sim haver, estamos falando de GUIS, e assim como Tk  GTK é uma Biblioteca para criar aplicações gráficas.  Ao contrário do que aconteceu com meus estudos em Tcl/Tk, com relação a GTK eu fui adiante e hoje estudo três linguagens diferentes que fazem uso desta mesma biblioteca, dai vem o título deste artigo e também o assunto do mesmo.</p>
<p style="text-align:justify;">Neste artigo pretendo apresentar a todos a biblioteca GTK usada no gnome das distribuições linux.  Também pretendo mostrar três linguagens que fazem uso desta biblioteca, e deixar que você escolha a mais poderosa, a mais fácil ou a que você sabe, para  que você crie suas aplicações gráficas utilizando GTK.</p>
<p style="text-align:justify;">Antes de falar dessas três linguagens vamos dá uma olhada no histórico da biblioteca GTK.</p>
<p style="text-align:justify;">GTK quer dizer Gnome tool kit, e é usado inteiramente no gnome.  Um dos aplicativos gráficos mais famosos do mundo open source, o gimp, possui sua parte gráfica toda feita em GTK.  Além de ser fácil de aprender, esta biblioteca é muiltiplataforma, logo você vai poder criar aplicações unix ou win32.  Mas como criar tais aplicações e quais as três linguagens que você disse que fazem uso da GTK?  São elas PHP-GTK2, C e Python, isso claro sem citar tantas outras que também fazem uso da GTK.</p>
<p style="text-align:justify;">Agora é a hora da verdade, vou mostrar três exemplos de codigos diferentes nestas três linguages e vocês escolhem em qual delas deseja começar a programar usando GTK.</p>
<p><strong>Em C</strong></p>
<pre class="brush: cpp;">
#include &lt;gtk/gtk.h&gt;

static void destroy( GtkWidget *widget,
                     gpointer   data );

int main( int   argc,
          char *argv[] )
{
    GtkWidget *window ,*label;

    gtk_init (&amp;argc, &amp;argv);
    //Cria a janela e a ponhe no topo
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    //Da um tamanho a janela
    gtk_window_set_default_size(GTK_WINDOW (window),300,200);
    //Da um titulo a janela
    gtk_window_set_title(GTK_WINDOW (window),&quot;Ola mundo&quot;);

    //Cria o label com a frase Ola mundo <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> !
    label = gtk_label_new(&quot;Ola Mundo <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> !&quot;);
    //Adiciona o label a janela
    gtk_container_add(GTK_CONTAINER (window), label);
    //Adiciona a funcao destroy para fechar a janela
    g_signal_connect (G_OBJECT (window), &quot;destroy&quot;,
		      G_CALLBACK (destroy), NULL);

    //Diz pra mostrar todos os widgets da janela
    gtk_widget_show_all (window);
    //loop do gtk
    gtk_main ();

    return 0;
}
//Funcao pra quando clicar no x da janela ela fechar
static void destroy( GtkWidget *widget,
                     gpointer   data )
{
    gtk_main_quit ();
}
</pre>
<p>Achou em C complicado? Então que tal em PHP-Gtk2.</p>
<p><strong>PHP-Gtk2</strong></p>
<pre class="brush: php;">
&lt;?php

$wnd = new GtkWindow();
$wnd-&gt;set_title('Olá mundo');
$wnd-&gt;set_size_request(300,200);
$wnd-&gt;connect_simple('destroy', array('gtk', 'main_quit'));

$label_ola= new GtkLabel(&quot;Olá Mundo <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> !'&quot;);
$wnd-&gt;add($label_ola);

$wnd-&gt;show_all();
Gtk::main();
?&gt;
</pre>
<p style="text-align:justify;">Se ainda assim você achou difícil ou não gostou de PHP-Gtk2, então tenta ai no python.</p>
<p><strong>Python</strong></p>
<pre class="brush: python;">
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require( '2.0' )
import gtk

def main():
	window = gtk.Window(gtk.WINDOW_TOPLEVEL)
	window.set_title( &quot;Ola Mundo&quot; )
	window.set_size_request(300,200)
	window.connect('destroy',gtk.main_quit)

	label = gtk.Label(' Ola Mundo <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> !' )
	window.add(label)

	window.show_all()

	gtk.main()

if __name__ == '__main__':
	main()
</pre>
<p style="text-align:justify;">E ai está os três códigos fazem a mesma coisa, mostram uma janela com um label dizendo &#8220;ola mundo&#8221;. Agora se você não conhece nenhuma dessas linguagens ou não gosta delas há outras opções para você, eis a lista de linguagens que fazem uso da Gtk:</p>
<p><strong></strong></p>
<pre><strong>C++  	gtkmm
C# 	Gtk#
Java 	java-gnome
Python 	PyGTK
Perl 	gtk2-perl
R 	RGtk2
Guile 	guile-gnome
Ruby 	Ruby-GNOME2
PHP 	PHP-GTK
Ada 	GtkAda
OCaml 	LablGTK
Haskell Gtk2Hs
Lua 	lua-gtk
S-Lang 	SLgtk 	      </strong></pre>
<p style="text-align:justify;">
<p style="text-align:justify;">Viu quantas possibilidades você tem. Até aquela linguagem verborratica e chata que começa com J usa o Gtk.  E além disso você pode usar o Glade que é uma ferramenta onde você pode construir sua interface gráfica sem digitar código, apenas fazendo uso do projeto que o Glade gera e utilizando um parser.  Mas essa historia fica para uma próxima oportunidade.  A quem desejar aprender mais sobre Gtk, dêem uma olhada nas referências ou se liguem aqui no Core Code que em breve vou criar um tutorial de C gtk, pygtk e claro php-gtk2 com o uso do glade e sem o uso do glade.</p>
<p style="text-align:justify;">
<p style="text-align:justify;"><strong>Referências</strong></p>
<p style="text-align:justify;"><a title="Pagina do Gtk" href="http://www.gtk.org/">http://www.gtk.org/</a></p>
<p style="text-align:justify;"><a title="Gtk com C" href="http://library.gnome.org/devel/gtk-tutorial/stable/c24.html">http://library.gnome.org/devel/gtk-tutorial/stable/c24.html</a></p>
<p style="text-align:justify;"><a title="Pagina do php-gtk" href="http://www.php-gtk.com.br"><span class="a">www.php-gtk.com.br</span></a></p>
<p style="text-align:justify;"><a title="Pagina do php-gtk internacional" href="http://gtk.php.net"><span class="a">gtk.php.net</span></a></p>
<p style="text-align:justify;"><a title="Pagina com vários tutorias de php-gtk" href="http://www.kksou.com/"><span class="a">www.kksou.com/</span></a></p>
<p style="text-align:justify;"><a title="Pagina do pygtk" href="http://www.pygtk.org/"><span class="a">www.<strong>pygtk</strong>.org/</span></a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/corecode.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/corecode.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/corecode.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/corecode.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/corecode.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/corecode.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/corecode.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/corecode.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/corecode.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/corecode.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/corecode.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/corecode.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=corecode.wordpress.com&blog=3748115&post=15&subd=corecode&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://corecode.wordpress.com/2008/05/22/tres-vezes-gtk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/968c524e1d4a4b2b4b22e35672b5be8a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kirotawa</media:title>
		</media:content>
	</item>
		<item>
		<title>pygtk + pygame</title>
		<link>http://corecode.wordpress.com/2008/05/17/pygtk-pygame/</link>
		<comments>http://corecode.wordpress.com/2008/05/17/pygtk-pygame/#comments</comments>
		<pubDate>Sat, 17 May 2008 17:12:46 +0000</pubDate>
		<dc:creator>leonidaskirotawa</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[pygtk]]></category>

		<guid isPermaLink="false">http://corecode.wordpress.com/?p=3</guid>
		<description><![CDATA[
Há algum tempo venho estudando pygtk e pygame, e recentemente tive a idéia de migrar um jogo, feito por um colega, de C++ para pygame. Como o jogo original possui uma interface gráfica bonitinha, então pensei “tenho que fazer o mesmo com o python, mas como?” Pois até então nunca tinha trabalhado com pygtk e [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=corecode.wordpress.com&blog=3748115&post=3&subd=corecode&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal">
<p class="MsoNormal" style="text-align:justify;">Há algum tempo venho estudando pygtk e pygame, e recentemente tive a idéia de migrar<span> </span>um jogo, feito por um colega, de C++ para pygame.<span> </span>Como o jogo original possui uma interface gráfica bonitinha, então pensei “tenho que fazer o mesmo com o python, mas como?” Pois até então nunca tinha trabalhado com pygtk e pygame juntos.<span> </span>Resolvi vasculhar na net algo sobre e encontrei uma solução ótima e simples (alias como tudo em python).<span> </span>A solução é criar um gtk.DrawingArea e dentro dele mapear uma superfície SDL, no nosso caso a tela do pygame (pygame.display()).<span> </span>Uma vez que você fez isso é só manipular o seu código pygame no seu display e pronto.<span> </span>Agora eu vou deixar de enrolar e mostrar e explicar o tal código.</p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;"><strong>CODE</strong></p>
<p class="MsoNormal" style="text-align:justify;"><span style="color:#008000;"># Proof of concept for PyGTK+Pygame<br />
# Seo Sanghyeon</span></p>
<address><span style="color:#0000ff;">import </span>os, pygame, gtk, pygtk</address>
<address><span style="color:#0000ff;"> import</span> random</address>
<address> </address>
<address><span style="color:#0000ff;">def </span><span style="color:#ff00ff;">pygame_hack</span><span style="color:#000080;">(</span>widget<span style="color:#000080;">):</span></address>
<p style="padding-left:30px;"><span style="color:#0000ff;">def </span><span style="color:#ff00ff;">callback<span style="color:#000080;">(</span></span>widget, *args<span style="color:#000080;">):</span></p>
<p style="padding-left:60px;">handle <span style="color:#000080;">=</span> widget.window.xid<br />
size <span style="color:#000080;">= </span>widget.size_request<span style="color:#000080;">()</span><br />
os.environ<span style="color:#000080;">[</span><span style="color:#999999;">'SDL_WINDOWID'</span><span style="color:#000080;">]</span> = str<span style="color:#000080;">(</span>handle<span style="color:#000080;">)</span><br />
pygame.display.init<span style="color:#000080;">()</span><br />
pygame.display.set_mode<span style="color:#000080;">(</span>size<span style="color:#000080;">)</span></p>
<p style="padding-left:30px;">widget.connect<span style="color:#000080;">(&#8216;</span><span style="color:#999999;">map-event&#8217;</span>, callback<span style="color:#000080;">)</span></p>
<p><span style="color:#0000ff;">def</span> <span style="color:#ff00ff;">fill_random</span><span style="color:#000080;">(</span>widget<span style="color:#000080;">):</span></p>
<p style="padding-left:30px;">screen <span style="color:#000080;">=</span> pygame.display.get_surface<span style="color:#000080;">()</span><br />
r <span style="color:#000080;">=</span> random.randrange<span style="color:#000080;">(</span><span style="color:#ff0000;">255</span><span style="color:#000080;">)</span><br />
g <span style="color:#000080;">=</span> random.randrange<span style="color:#000080;">(</span><span style="color:#ff0000;">255</span><span style="color:#000080;">)</span><br />
b <span style="color:#000080;">= </span>random.randrange<span style="color:#000080;">(</span><span style="color:#ff0000;">255</span><span style="color:#000080;">)</span><br />
screen.fill<span style="color:#000080;">((</span>r, g, b<span style="color:#000080;">))</span><br />
pygame.display.flip<span style="color:#000080;">()</span></p>
<p><span style="color:#0000ff;">def</span> <span style="color:#ff00ff;">main</span><span style="color:#000080;">():</span></p>
<p style="padding-left:30px;">win = gtk.Window<span style="color:#000080;">()</span><br />
win.connect<span style="color:#000080;">(&#8216;</span><span style="color:#999999;">destroy&#8217;</span>,gtk.main_quit<span style="color:#000080;">)</span><br />
box <span style="color:#000080;">=</span> gtk.VBox<span style="color:#000080;">()</span><br />
win.add<span style="color:#000080;">(</span>box<span style="color:#000080;">)</span><br />
custom <span style="color:#000080;">=</span> gtk.DrawingArea<span style="color:#000080;">()</span><br />
custom.set_size_request<span style="color:#000080;">(</span><span style="color:#ff0000;">300</span>,<span style="color:#ff0000;">200</span>)<br />
pygame_hack<span style="color:#000080;">(</span>custom<span style="color:#000080;">)</span></p>
<p style="padding-left:30px;">box.pack_start<span style="color:#000080;">(</span>custom<span style="color:#000080;">)</span><br />
button <span style="color:#000080;">= </span>gtk.Button<span style="color:#000080;">(<span style="color:#999999;">&#8216;</span></span><span style="color:#999999;">Random fill</span>&#8216;<span style="color:#000080;">)</span></p>
<p style="padding-left:30px;">button.connect<span style="color:#000080;">(</span>&#8216;<span style="color:#999999;">clicked</span>&#8216;,fill_random<span style="color:#000080;">)</span></p>
<p style="padding-left:30px;">box.pack_start<span style="color:#000080;">(</span>button<span style="color:#000080;">)</span></p>
<p style="padding-left:30px;">win.show_all<span style="color:#000080;">()</span><br />
gtk.main<span style="color:#000080;">()</span></p>
<p><span style="color:#0000ff;">if</span> __name__ <span style="color:#000080;">== </span>&#8216;<span style="color:#999999;">__main__</span>&#8216;<span style="color:#000080;">:</span></p>
<p style="padding-left:30px;">main<span style="color:#000080;">()</span></p>
<p style="padding-left:30px;">
<p style="text-align:justify;">De todo o código a parte mais importante é a função pygame_hack.  É nessa parte do código que pegamos o ID da nossa DrawingArea e copiamos para ser o ID da nossa SDLWINDOW, e é isso que faz com que o display do pygame rode dentro dela.</p>
<p style="text-align:justify;">Neste código abaixo  pegamos o XID, ou código do X da nossa janela.</p>
<p>handle <span style="color:#000080;">=</span> widget.window.xid</p>
<p>Neste outro copiamos o XID da nossa DrawingArea pra dentdo da nossa SDLWINDOW.</p>
<p>os.environ<span style="color:#000080;">[</span><span style="color:#999999;">'SDL_WINDOWID'</span><span style="color:#000080;">]</span> = str<span style="color:#000080;">(</span>handle<span style="color:#000080;">)</span></p>
<p style="text-align:justify;">Essa pequena applicação mostra uma janela pygtk com um botão que quando acionado preenche o display do pygame dentro do DrawingArea com uma cor que foi selecionada randomicamente. Ver imagem abaixo.</p>
<p><a href="http://corecode.files.wordpress.com/2008/05/aplicacao1.png"><img class="alignnone size-medium wp-image-6" src="http://corecode.files.wordpress.com/2008/05/aplicacao1.png?w=300&#038;h=237" alt="" width="300" height="237" /></a></p>
<p style="text-align:justify;">Viu tudo muito simples.  Só tem um problema não roda no windows pois ele não consegue pegar o XID, ainda estou procurando um jeito de fazer isso no  ruindows, mas no linux roda normal, então tá otimo.  O legal desse exemplo é que ele mostra e dá ideias, além de você poder por um display do pygame, você pode por um display do opengl e fazer uma aplicação bem interessante.  Afinal com python nem o céu é o limite =].</p>
<p style="text-align:justify;">Como o intuito deste artigo é apenas explicar como por o pygame dentro da janela do gtk não vou explicar todo o código linha a linha, mas se alguém tiver alguma duvida sobre comenta ai que eu respondo.</p>
<p><a href="http://corecode.files.wordpress.com/2008/05/blog1.png"><br />
</a></p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;"><span id="more-3"></span></p>
<p class="MsoNormal">
<p class="MsoNormal">
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/corecode.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/corecode.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/corecode.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/corecode.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/corecode.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/corecode.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/corecode.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/corecode.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/corecode.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/corecode.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/corecode.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/corecode.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=corecode.wordpress.com&blog=3748115&post=3&subd=corecode&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://corecode.wordpress.com/2008/05/17/pygtk-pygame/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/968c524e1d4a4b2b4b22e35672b5be8a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kirotawa</media:title>
		</media:content>

		<media:content url="http://corecode.files.wordpress.com/2008/05/aplicacao1.png?w=300" medium="image" />
	</item>
	</channel>
</rss>