<?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>.::Escovando Bits::. &#187; pyqt</title>
	<atom:link href="http://escovandobits.wordpress.com/category/pyqt/feed/" rel="self" type="application/rss+xml" />
	<link>http://escovandobits.wordpress.com</link>
	<description>Programação, Linux, tecnologia da informação, dicas, artigos</description>
	<lastBuildDate>Sun, 05 Jul 2009 15:42:47 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='escovandobits.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/ac8d2c79730f1bc1a6ebab006a3670da?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>.::Escovando Bits::. &#187; pyqt</title>
		<link>http://escovandobits.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://escovandobits.wordpress.com/osd.xml" title=".::Escovando Bits::." />
		<item>
		<title>Timer no PyQT</title>
		<link>http://escovandobits.wordpress.com/2009/03/27/timer_pyqt/</link>
		<comments>http://escovandobits.wordpress.com/2009/03/27/timer_pyqt/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 16:48:42 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[pyqt]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[threads]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=305</guid>
		<description><![CDATA[Quem programa em Python provavelmente já precisou fazer alguma coisa com threads. Contudo quando estamos trabalhando com PyQT há alguns incovenientes em utilizar as threads da API do Python, principalmente quando temos interfaces gráficas. Recentemente tive problemas para fazer uma função que executasse determinada ação após um tempo pré-definido em segundos. Pois quando enquanto a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=305&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Quem programa em Python provavelmente já precisou fazer alguma coisa com <a title="Python Threading" href="http://docs.python.org/library/threading.html" target="_blank">threads</a>. Contudo quando estamos trabalhando com PyQT há alguns incovenientes em utilizar as threads da API do Python, principalmente quando temos interfaces gráficas. Recentemente tive problemas para fazer uma função que executasse determinada ação após um tempo pré-definido em segundos. Pois quando enquanto a thread não terminasse sua execução a janela gráfica não aparecia.  Encontrei duas maneiras para solucionar,  a primeira utilizando <a href="http://doc.trolltech.com/4.4/qthread.html" target="_blank">QThread</a> e uma muito mais simples usando <a href="http://doc.trolltech.com/4.4/qtimer.html" target="_blank">QTimer</a>,  fica o registro das duas maneiras:</p>
<p style="text-align:justify;"><span id="more-305"></span></p>
<pre><span style="color:#ff80e0;">from</span><span style="color:#141312;"> PyQt4 </span><span style="color:#ff80e0;">import</span><span style="color:#141312;"> *</span>
<span style="color:#ff80e0;">from</span><span style="color:#141312;"> PyQt4.QtCore </span><span style="color:#ff80e0;">import</span><span style="color:#141312;"> *</span>

<span style="color:#141312;"><strong>class</strong> MyTimer(QThread):</span>
<span style="color:#141312;">	<strong>def</strong> </span><span style="color:#000e52;"><strong>__init__</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">,parent = </span><span style="color:#006e28;">None</span><span style="color:#141312;">):</span>
<span style="color:#141312;">		QThread.</span><span style="color:#000e52;"><strong>__init__</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">,parent)</span>

<span style="color:#141312;">	<strong>def</strong> run(</span><span style="color:#006e28;">self</span><span style="color:#141312;">):</span>
<span style="color:#141312;">		<strong>while</strong> </span><span style="color:#b08000;">1</span><span style="color:#141312;">:</span>
<span style="color:#141312;">		</span><span style="color:#888786;"><em># a cada 'self.tempo' segundos o sinal é emitido e
                  nós tratamos na outra classe. Exemplo</em></span>:
<span style="color:#141312;">			</span><span style="color:#006e28;">self</span><span style="color:#141312;">.<strong>emit</strong>(</span><span style="color:#0095ff;"><strong>SIGNAL</strong></span><span style="color:#141312;">(</span><span style="color:#bf0303;">"sinal_atualiza()"</span><span style="color:#141312;">))</span>
<span style="color:#141312;">			</span><span style="color:#006e28;">self</span><span style="color:#141312;">.sleep(</span><span style="color:#006e28;">self</span><span style="color:#141312;">.tempo)</span>

<span style="color:#141312;">	<strong>def</strong> Timer(</span><span style="color:#006e28;">self</span><span style="color:#141312;">,t=</span><span style="color:#b08000;">5</span><span style="color:#141312;">):</span>
<span style="color:#141312;">		</span><span style="color:#006e28;">self</span><span style="color:#141312;">.tempo = t</span>
<span style="color:#141312;">		</span><span style="color:#006e28;">self</span><span style="color:#141312;">.start()

</span></pre>
<p style="text-align:justify;"><span style="color:#141312;">Depois, na sua classe basta que gerencia a interface gráfica, basta instanciar o objeto e tratar os sinais definidos em MyTimer(), você pode definir quantos sinais forem necessários:</span></p>
<pre><span style="color:#141312;">	  </span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer = MyTimer()</span>
<span style="color:#141312;">	  </span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer.Timer(3)</span> <span style="color:#888786;"><em><em># 3 segundos

</em></em></span><span style="color:#141312;">	  </span><span style="color:#006e28;">self</span><span style="color:#141312;">.</span><span style="color:#0095ff;"><strong>connect</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer,
                       QtCore.</span><span style="color:#0095ff;"><strong>SIGNAL</strong></span><span style="color:#141312;">(</span><span style="color:#bf0303;">"sinal_stualiza()"</span><span style="color:#141312;">),
                       </span><span style="color:#006e28;">self</span><span style="color:#141312;">.atualiza)</span>
<span style="color:#141312;">	  </span><span style="color:#888786;"><em># caso seja necessario executar algo após o termino da
          # therad (não é o caso </em></span><span style="color:#888786;"><em>do exemplo acima que o while
          # "trava" na função run()</em></span>
<span style="color:#141312;">	  </span><span style="color:#006e28;">self</span><span style="color:#141312;">.</span><span style="color:#0095ff;"><strong>connect</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer,
                       QtCore.</span><span style="color:#0095ff;"><strong>SIGNAL</strong></span><span style="color:#141312;">(</span><span style="color:#bf0303;">"finished()"</span><span style="color:#141312;">),
                       </span><span style="color:#006e28;">self</span><span style="color:#141312;">.finaliza)</span></pre>
<p>Contudo existe uma maneira <strong>muito</strong> mais fácil de fazer um timer utilizando PyQT, usando a <a href="http://doc.trolltech.com/4.4/qtimer.html" target="_blank">QTimer</a></p>
<pre><span style="color:#141312;">	</span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer = QtCore.QTimer()

</span><span style="color:#141312;">	</span><span style="color:#006e28;">self</span><span style="color:#141312;">.</span><span style="color:#0095ff;"><strong>connect</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer,
                     QtCore.</span><span style="color:#0095ff;"><strong>SIGNAL</strong></span><span style="color:#141312;">(</span><span style="color:#bf0303;">"timeout()"</span><span style="color:#141312;">),
                     </span><span style="color:#006e28;">self</span><span style="color:#141312;">.atualiza)</span>

       <span style="color:#141312;"> </span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer.start(</span><span style="color:#b08000;">3000</span><span style="color:#141312;">)</span> <span style="color:#888786;"><em># tempo em milisegundos</em></span></pre>
Posted in programação, pyqt Tagged: pyqt, python, qt, threads <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/305/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=305&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/03/27/timer_pyqt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>
	</item>
		<item>
		<title>QConv &#8211; conversão de codeset</title>
		<link>http://escovandobits.wordpress.com/2008/01/03/qconv-conversao-de-codeset/</link>
		<comments>http://escovandobits.wordpress.com/2008/01/03/qconv-conversao-de-codeset/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 22:44:53 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[pyqt]]></category>
		<category><![CDATA[utilitário]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/2008/01/03/qconvpy-conversao-de-codeset/</guid>
		<description><![CDATA[Quantas vezes você já teve dificuldades em ler algum texto ou mensagem digital, seja em computadores ou celulares, pois encontrou o texto todo bagunçado?
Batatinha quando nasce espalha ramas pelo chÃ£o,
mamÃ£ezinha quando dorme bota a mÃ£o no coraÃ§Ã£o.

Este post apresenta um pequeno script (aprox. 60 linhas) como um front-end de um utilitário do GNU/Linux (iconv) para corrigir [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=21&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">Quantas vezes você já teve dificuldades em ler algum texto ou mensagem digital, seja em computadores ou celulares, pois encontrou o texto todo bagunçado?</p>
<p align="center">Batatinha quando nasce espalha ramas pelo <font color="#ff0000">chÃ£o</font>,<br />
<font color="#ff0000">mamÃ£ezinha</font> quando dorme bota a <font color="#ff0000">mÃ£o </font>no <font color="#ff0000">coraÃ§Ã£o</font>.</p>
<pre></pre>
<p align="justify">Este <i>post </i>apresenta um pequeno <i>script </i>(aprox. 60 linhas) como um <i>front-end </i>de<i> </i>um utilitário<i> </i>do <i>GNU/Linux </i>(iconv)<i> </i>para corrigir esse problema.</p>
<p><span id="more-21"></span></p>
<h2 align="left">Um pouco de cultura&#8230;</h2>
<p align="justify">Por razões históricas, os textos nos computadores são gravados utilizando uma codificação dependente<b> </b>da língua em que foram escritos. Com a popularização da <i>internet</i> ocorreu um aumento no acesso e troca de textos entre nações, o simples ato de entrar em um <i>site</i> representava a necessidade de conversão entre idiomas. Dessa maneira, conversões tornaram-se essenciais. Devido a quantidade de codificações existentes começou a existir uma incompatibilidade nessa troca de textos. A solução foi unir esses caracteres em uma codificação que tornou-se um padrão chamado <a target="_blank" href="http://en.wikipedia.org/wiki/Unicode" title="Referência p/ Wikipedia (english)"><i>Unicode</i></a>.</p>
<div align="justify"></div>
<p align="justify">Contudo, muitos computadores ainda trabalham com codificações locais, com capacidade limitada para suportar caracteres de outros idomas. Softwares como <i>browsers</i> e <i>mailsers</i> devem se capazes de converter entre os padrões. Para facilitar a vida, o projeto GNU desenvolveu a biblioteca libiconv para fazer a conversão entre as diferetentes codificações (<i>codesets</i>).</p>
<h2 align="left">QConv &#8211; Introdução</h2>
<p align="justify">Basta colocar o nome do arquivo que se deseja converter, escolher a codifiação de entrada e o formato de saída. Lembrando que é apenas um <i>script</i> para facilitar a utilização do programa <b>iconv. </b>Portando, os formatos suportados são os suportados pelo iconv. Você irá perceber que existem vários <i>codesets</i>, mas muitos são apelidos. Os mais comuns são o ISO8859-1 e o UTF-8.</p>
<p align="center"><img width="500" src="http://farm3.static.flickr.com/2228/2144094545_367f2bfd34.jpg" alt="Tela do QConv" height="143" /></p>
<p align="justify">Eu utilizo quando faço <i>downloads</i> de arquivos no formato txt, doc, odt e html e não consigo lê-los de forma clara.</p>
<div align="justify"></div>
<p align="center">Para fazer o download do programa clique<b> <a href="http://br.geocities.com/maluta_tiago/blog/escovandobits/qconv/qconv-0.1.tar.gz" title="Versão 0.1">aqui</a></b>.</p>
<h2 align="left">QConv &#8211; Utilização</h2>
<p align="left">Descompacte o arquivo em uma pasta qualquer</p>
<div align="justify"></div>
<blockquote>
<h5 align="left"># cd ~ </h5>
</blockquote>
<blockquote>
<h5 align="left"># tar zxvf qconv-0.1.tar.gz</h5>
<p align="left">&nbsp;</p>
</blockquote>
<div align="justify"></div>
<p align="justify">Serão descompactados 3 arquivos:</p>
<div align="justify"></div>
<blockquote>
<p align="justify">qconv/<b>qconv.py </b>- arquivo principal<br />
qconv/ui_viewform.py &#8211; referência aos <i>widgets</i> do <i>script</i><br />
qconv/viewForm.ui &#8211; arquivo criado no <i>Qt Designer</i></p></blockquote>
<div align="justify"></div>
<p align="justify">Para utilizar o programa digite no diretório em que descompactou os arquivos:</p>
<div align="justify"></div>
<blockquote>
<h5 align="justify"># cd qconv/</h5>
</blockquote>
<blockquote>
<h5 align="justify"># python qconv.py</h5>
<p align="justify">&nbsp;</p>
</blockquote>
<div align="justify">Lembrando que é preciso ter o PyQt4 instalado. Caso não tenha faça o <a target="_blank" href="http://www.riverbankcomputing.co.uk/pyqt/download.php" title="Download PyQt4 for Windows e Linux">download</a>.</div>
<p align="justify">&nbsp;</p>
<h2>QConv &#8211; Conclusão</h2>
<p align="justify">Fiz esse programa para conhecer melhor a linguagem <a target="_blank" href="http://www.python.org/">Python</a> e o suporte ao <a target="_blank" href="http://trolltech.com/products/qt">Qt</a> desenvolvida pela RiverBank. Maiores informações <a target="_blank" href="http://www.riverbankcomputing.co.uk/pyqt/index.php" title="About PyQt">aqui</a>.</p>
<div align="justify"></div>
<p align="justify">Algumas coisas podiam ser melhoradas, uma delas é a detecção automática do <i>codeset</i>, mas isso fica para outro <i>post</i>&#8230;</p>
<div align="justify"></div>
<p align="justify">Como precisei aprender várias particularidades da linguagem Python eu pretendo, futuramente, mostrar alguma coisa, enquanto isso aproveite parar dar uma lida no código-fone. Não exite em comentar <i>bugs</i>, melhorias a serem feitas no código-fonte, críticas, etc;</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/escovandobits.wordpress.com/21/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/escovandobits.wordpress.com/21/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=21&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2008/01/03/qconv-conversao-de-codeset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2228/2144094545_367f2bfd34.jpg" medium="image">
			<media:title type="html">Tela do QConv</media:title>
		</media:content>
	</item>
	</channel>
</rss>