20 julho 2013

Fechamento abrupto da janela...

Saudações Geeks para os Geeks de plantão!

Após um bom tempo, sem tempo, resolvo voltar aqui e fazer deste lugar algo mais. Como comecei a trabalhar muitas coisas ficaram de lado, mas pensei um pouco e comecei a vincular ao meu novo ofício minhas destrezas de programador (rsrsrsrs).

Sendo assim me coloquei a fazer um aplicativo que auxiliasse a empresa num cálculo basicão que vez ou outra precisam e por milagre divino eu consegui. Finalizei o código básico em três dias. Nesse meio tempo relembrei tudo o que poderia à medida que eu necessitei. Ainda estou implementando mais uns recursos antes de lançar o programa Beta e isso vai requerer um tempo maior, mas o principal eu já consegui.

Assim, nesse vai e vem das velhas fontes de informação sobre Python me deparei com algo que já me irritou antes, deveras. A janela teima em não esperar e fecha numa velocidade absurda. Procurei muito, sempre achando que meses atrás eu tinha encontrado um meio simples que sinceramente não lembro. (Na verdade acho que estou trocando a forma de C++ pensando que era Python. =/ ). Sendo assim, como não consigo me relembrar pensei em fazer uma gambiarra que funcionou. Eu ainda acredito que há uma maneira muito mais simples, um comando de uma palavra só e ficarei grato se alguém postar aqui, mas o que desenvolvo com esse post é justamente o improviso. Não sabe? Não lembra? Mesmo assim ainda poderá haver um meio de resolver.

Pois bem. Vejam o super código abaixo:


Como podem ver, esse super código, se você clicar no arquivo .py, onde ele será executado independente do IDE, a janela nem ao menos demorará o suficiente para que olhemos pro canto certo. Isso é um inconveniente que sinceramente acho que todas as linguagens já deviam ter uma configuração padrão para evitar isso, mas como não tem há uma gambiarra pra isso muito simples utilizando IF e WHILE.

O WHILE será usado para implementar um comando de fechamento de programa. Primeiro vamos criar uma variável global (padronizei de EXIT em caixa alta mesmo) onde esta variável receberá o valor 0.

Observem abaixo:



Após iniciar o loop while e trabalhar o corpo do código é necessário criar uma condição IF como podem ver no exemplo acima. Essa condição definirá que o usuário está mesmo querendo terminar o programa e portanto o valor da variável global EXIT mudará para 0 fazendo com que o loop WHILE termine. Podem ver que há duas declarações de IF aninhadas. A primeira simplesmente determina se o usuário quer sair de fato e a segunda condição IF cria somente um travamento para janela, que fica esperando um valor qualquer já que o IF e o ELSE vão mudar o valor da variável EXIT para 0 independentemente.

Esse segundo IF é o segredo, fazendo com que a janela permaneça aberta até pelo menos o clique do enter. Uma solução não muito elegante, mas que vai auxiliar enquanto uma mais direta não aparece.

Como provavelmente notaram, há várias condições de resposta de SIM na primeira condição IF. Isso é muito útil já que o usuário terá opções diversas para conseguir finalizar o programa. Verifiquem bem todas as opções e tentem entender por que todas elas foram feitas.

That's all folks!

Isso está me auxiliando enquanto não recordo a linha de comando exata. No entanto, como deixei claro, o post é para mostrar mesmo que independente de implementações que tenhamos na manga, ainda assim temos possibilidade de resolver o que quer que seja. (claro, que não seja bug da linguagem!)

See you!

ATUALIZAÇÃO---------------------- 15/08/2013


Olá. Com o tempo sempre aparecem coisas mais interessantes e começamos a ver que antes poderíamos ter feito diferente. Esse é um dos casos e acredito que voltarei para esse post para atualizar várias vezes, visto que os exemplos acima são de fato extremamente iniciantes.


Portanto, assim sendo, aqui vai uma atualização para reduzir a quantidade de opções no "IF". Essa redução ajuda a deixar o código menos bagunçado, feio mesmo. Ainda não é a melhor alteração a ser feita mas por enquanto serve. Verifique o novo exemplo:



Aqui está sendo utilizado o ".lower()" que faz com que o que for digitado pelo usuário não tenha caracteres em caixa alta. O mesmo pode ser pensado no contrário com o ".upper()" e colocando as opções de acordo no "IF".