PyGTK 3: mini tutorial de GUI com Python + GTK + 3

Faremos um pequeno programa com PyGTK 3.0 que também funciona para PyGTK 3.4. Esta pequena GUI ensinará como dividir um programa em dois ou mais arquivos.

Você pode visitar o tutorial de Sebastian Pölsterl sobre o novo PyGTK 3, aqui está o novo tutorial, deixo o link:

http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html

Este é o blog do Sebastian.

http://k-d-w.org/node/88

Uma crítica a este tutorial de Sebastian é que ele não ensina como dividir um programa em partes ou em vários arquivos, teria sido bom se ele mostrasse um exemplo de como fazê-lo com o PyGTK 3.

Todos os programas grandes e complexos são divididos em vários arquivos e os arquivos são até colocados em outros diretórios, ou seja, estão localizados em pastas diferentes.

Vamos começar com um pequeno exemplo:

Aqui está o código de escrita em um único arquivo chamado gui.py. Abrimos o editor de texto Gedit ou o editor que mais usamos, copiamos o código abaixo e salvamos como gui.py

from gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Open \ "botão foi clicado" def on_close_clicked (self, button): print "Fechando aplicativo" Gtk.main_quit () def __init__ (self): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk.main_quit) self.box = Gtk.Box () self.window.add (self.box) self. button = Gtk.Button (label = 'Open') self.button.connect ("clicked", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Close') self.button.connect ("clicked", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

frontão

def on_open_clicked (self, button): imprimir o botão "\" Abrir \ "foi clicado"

É uma função que se ativa no terminal quando clicamos no botão abrir. O sinal para ativá-lo é:

self.button.connect ("clicked", self.on_open_clicked) def on_close_clicked (self, button): print "Fechando aplicativo" Gtk.main_quit ()

É uma função que é ativada quando clicamos no botão Fechar.

feche o programa que executamos.

o sinal para ativá-lo é

self.button.connect ("clicked", self.on_close_clicked) de gi.repository import Gtk ### invocamos as bibliotecas PyGTK ### class gui (): ### definição de classe chamada gui é a classe principal # ##

Declaração de Widgets: um widgets é um programa predeterminado pelas bibliotecas GUI que usamos. Por exemplo, um widget é um botão, uma janela, uma caixa, etc. Estes são os widgets que declaramos em nosso programa.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Abrir') ### # botão de abrir #### self.button = Gtk.Button (label = 'Fechar') #### botão de fechar #### self.window.add (self.box) #### a caixa está contida em a janela chamada janela #### self.box.pack_start (self.button, True, True, 0) ##### o botão está contido na caixa chamada caixa ### self.window.show_all () ## # mostramos a janela inteira ### gui = gui () ### criar um objeto gui ####

Colocamos nosso programa em uma pasta chamada simples no nosso caso na área de trabalho

Fert

Abrimos a pasta com o terminal, no meu caso uso o Nemo do Linux Mint 14.

fechado

Para compilar, colocamos no terminal python gui.py

Veja a imagem.

terminal

Agora podemos ver nosso pequeno programa ou novo widget criado com as bibliotecas PyGTK 3

É uma janela simples com dois botões.

sem título

Agora dividimos o programa em três partes, então deixo o código para os três arquivos.

Primeiro arquivo gui.py

from gi.repository import Gtk de destroy import destroy from io import io classe gui (destroy, io): def __init __ (self): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk .main_quit) self.box = Gtk.Box () self.window.add (self.box) self.button = Gtk.Button (label = 'Open') self.button.connect ("clicked", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Fechar') self.button.connect ("clicked", self.on_close_clicked) self.box.pack_start ( self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Segundo arquivo io.py

classe io: def on_open_clicked (self, button): print "\" Abrir \ "o botão foi clicado"

Terceiro arquivo destroy.py

from gi.repository import Classe Gtk destroy: def on_close_clicked (self, button): print "Fechando aplicativo" Gtk.main_quit ()

Colocamos os três arquivos na mesma pasta, no nosso caso, a pasta é chamada de divisão simples.

simples

Para compilar os três arquivos. Abrimos a pasta com o terminal e simplesmente a colocamos de volta no terminal

python gui.py

Modificações feitas no código gui.py

from destroy import destroy ### instrução para importar nosso arquivo destroy.py ### from io import io ### instrução para importar nosso arquivo io.py ### class gui (destroy, io): #### para a classe main, adicionamos as subclasses destroy e io ####

Você pode ver que a frase

def on_open_clicked (self, button): imprimir o botão "\" Abrir \ "foi clicado"

Não está no gui.py, está no arquivo io.py

A sentença

def on_close_clicked (self, button):

imprimir "Fechamento de aplicativo"
Gtk.main_quit ()

está localizado no arquivo destroy.py

Assim, podemos dividir um programa em vários arquivos localizados em diferentes diretórios ao mesmo tempo.

Por outro lado, Python é um pilar do software livre, e está adaptado para funcionar com GTK 3.6 /3.8, seu nome é PyGTK. A adaptação do Python para o KDE é chamada de PyQT.

Python é adaptado para Mac OS e WINDOWS.

Espero que este mini tutorial do PyGTK3 tenha sido útil para você. Eles podem fazer todas as críticas construtivas que quiserem.

Eu também conheço alguns Gtk 3.4 /3.6 e Vala GTK 3.4 / 3.6.

http://www.youtube.com/watch?v=9ckRn_sx8CE

Por último, os usuários do KDE pedem desculpas por não fazer um mini tutorial para o KDE.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   apodrece87 dito

    No kde, prefiro usar o kdevelop (acho que é assim que se chama) para criar a interface do usuário à vontade, mas ainda tenho dificuldade em encontrar os processos para que isso aconteça x coisa: '(

  2.   st0rmt4il dito

    Ótimo para aqueles de nós que usam Python: D!

    Saudações!

  3.   Paul dito

    Olá, sigo esta comunidade há muito tempo e não tenho muita certeza se esta é a primeira vez que comento ou já o fiz antes 😀 (não sou muito dado a escrever comentários na web). O fato é que eu faço isso para deixar uma sugestão para Elav e KZKG ^ Gaara como administradores, e acho que seria uma boa ideia adicionar um plugin para colorir sintaxe agora que ultimamente vejo mais posts com código em diferentes linguagens de programação. Sei que existem alguns plug-ins, mas não experimentei nenhum porque não sou um usuário do wordpress, então deixo que vocês pensem na viabilidade da solicitação. Aproveito para perguntar ao restante dos leitores o que acham da ideia, pois sei que existem pessoas por aí que preferem ler o código sem nenhum adorno. Peço desculpas se isso já foi comentado aqui e foi rejeitado por algum motivo, pois não me lembro de ter visto nenhuma discussão sobre o assunto.

    1.    marianogaudice dito

      A verdade é que gostaria de ter a opção de colorir a sintaxe para destacar o código das linguagens de programação.
      Isso ajudaria os usuários que desejam aprender linguagens de programação.

      Mas hey, também estou confortável com o fórum e que podemos discutir e aprender juntos.

      1.    eliotime3000 dito

        GNU Emacs é mais confortável, já que pelo menos você tem que escolher em qual verificador de linguagem de programação deseja trabalhar (se você não quer mais peso para seu processador, use GNU Nano e desfrute do minimalismo no seu melhor).

        1.    marianogaudice dito

          Elio estamos falando de WordPress. Implementado no blog Desde Linux. Não possui funções para colorir as letras dos posts.

          1.    eliotime3000 dito

            Oh, me desculpe.

        2.    Pandev92 dito

          Naaa emacs é confortável para quem tem 84 dedos XD .., pessoas normais, textmate, sublimetext ou notepad ++ xd

          1.    eliotime3000 dito

            O implausível é não ter aprendido a digitar, o que é necessário para ser capaz de lidar bem com o GNU Emacs e seus atalhos de teclado. Além disso, sua GUI facilita o uso de seus menus (pode ser usado no Windows, mas não é recomendado fazê-lo no modo normal, mas sim no modo prompt de comando para que o win32 não boicote seu script).

  4.   Carper dito

    Tutorial muito legal. Mas, a propósito, o código-fonte python não é compilado, é uma linguagem interpretada.

    1.    moela dito

      Ele pode ser compilado em pseudo código. Não é uma linguagem de máquina, mas bytes que representam algo para o interpretador, mas o processo também é chamado de compilado. Nesse sentido, pode-se dizer que algo está compilado.

  5.   hty dito

    Talvez seja melhor aprender pytgk2 porque a versão mais recente disponível para Windows é a 2.24. A Série 3 se destaca por sua ausência. E as línguas ruins dizem que o gnomo quebra todas as ápis a cada nova versão.

    1.    marianogaudice dito

      Eu programo um mockup com GTK 3.4 / 3.6 e a verdade é que eles quebram sua paciência e sua cabeça, você tem que reescrever o código, agora entendo porque o pessoal do Linux Mint reclama do GTK e do projeto GNOME.
      Para os do MINT concordo com o GTK 2.4 isso não aconteceu.

  6.   Carlos dito

    Bom tutorial e referências.
    Apenas um detalhe, uma vez que o código foi inserido, no Python as indentações são obrigatórias e devem ser respeitadas no código de exemplo.

    Saudações!

    1.    marianogaudice dito

      Você pode explicar em que consistem as identificações obrigatórias em Python? Digo a verdade, nunca ouvi isso. Estou muito acostumado com os fóruns PyGTK 2/3 em inglês e talvez não os tenha percebido.

      1.    moela dito

        Em Python você não usa chaves como em C ou blocos de início / fim como em Pascal, mas tudo é entendido através da indentação que você dá ao código. Ou seja, os blocos são reconhecidos por serem indentados. É um recurso que adoro particularmente. Você evita escrever chaves e coisas assim.

        1.    Pandev92 dito

          Eu simplesmente não gosto disso, parece mais simples colocar duas pequenas chaves ou um std :: endl;, do que ser visto se a linha xd está bem tabulada

          1.    Felipe dito

            : p Seu professor de programação colocará um 0 para você. Ou pior, eles irão despedi-lo do seu emprego. O que mais importa é que o código seja legível com tudo o que isso implica

          2.    Pandev92 dito

            terminando com colchetes, isso me torna muito mais legível XD ..

          3.    moela dito

            A sério???


            int main(int argc, char *argv[]){program_name = argv[0];while ((argc > 1) && (argv[1][0] == '-')) {switch (argv[1][1]) {case 'v':verbose = 1; break;case 'o':out_file = &argv[1][2];break;case 'l':line_max = atoi(&argv[1][2]);break;default:fprintf(stderr,"Bad option %s\n", argv[1]);usage();}++argv;--argc;} if (argc == 1) {do_file("print.in");} else {while (argc > 1) {do_file(argv[1]);++argv;--argc;}}return (0);}

            Entende? Sem indentações, não é muito bem compreendido. E essa é fácil. Com um mais complexo, apenas o compilador o entende. O fato é que, já que você TEM que indentar de qualquer maneira (para que os humanos entendam o código), por que você teria que ser redundante e usar separadores? Chega de indentação e é isso.

          4.    Pandev92 dito

            Claro, nada é entendido, pois você não está respeitando as regras de boa escrita para um programa em c / c ++. O que você fez é válido para qualquer coisa, como aninhar uma função, dentro de uma função dentro de outra função que está dentro de outra, então eu quero ver você xd se você consegue entender.

          5.    Pandev92 dito

            aliás, com dois olhares, esse código é facilmente compreensível xD

          6.    moela dito

            O que fiz foi de propósito para mostrar a vocês que sem indentação, embora compile, é extremamente difícil entender qualquer código. Portanto, você tem 2 regras: Recuar e englobar com delimitadores. Mas isso é redundante. Em Python, esse código simplesmente não é aceito pelo interpretador. E você só tem uma regra: Recuar. Fácil.
            Mas hey, todos com seus gostos.

          7.    Atheus dito

            Ambos são bons, os indentados e os não indentados, na minha opinião prefiro o estilo ponto-e-vírgula ou rubi, semelhante ao python mas o indentação não é necessário.

            É assim que é melhor entendido: P:

            echo 'int main (int argc, char * argv []) {program_name = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {switch (argv [ 1] [1]) {caso 'v': verboso = 1; break; case 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; default: fprintf (stderr, »Opção inválida% s \ n », argv [1]); usage ();} ++ argv; –argc;} if (argc == 1) {do_file (" print.in ");} else {while (argc> 1) { do_file (argv [1]); ++ argv; –argc;}} return (0);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Saudações 😀

      2.    moela dito

        Acho que Carlos quer dizer que onde o código sai não há travessões. Isso com copiar e colar simplesmente não funciona. Não sei se a tag existe ao criar uma postagem para inserir o código do idioma. Seria bom se colocassem se não existe.

        1.    moela dito

          Eu já vi qual é o problema: a CODE Tag remove todos os espaços e tabulações (não deveria fazer isso !!!) Mas se você colocar um nbsp nela, o código parece bom. A0 em hexadecimal (160 em dez) embora eu ache que pode depender da fonte (não sei). Se for usado, ficará assim:

          def fib(n):
              a, b = 0, 1
              while a < n:
                  print(a)
                  a, b = b, a+b

          Isso nos meus testes parece bom, mas eu não tenho uma visualização quando posto as respostas (e deveria haver !!!) Se não sair, não é minha culpa

          1.    marianogaudice dito

            Veja os exemplos que Sebastian Pölsterl coloca em seu tutorial do PyGTK 3, Sebastian não coloca rótulos.

            Exemplo:

            http://python-gtk-3-tutorial.readthedocs.org/en/latest/entry.html#example

            você pode ver todo o tutorial de Sebastian.

          2.    moela dito

            Não sei a que se refere. O que estou dizendo é que aqui, nos posts, não é possível usar a Tag HTML «CODE» para que o que você coloca como código saia bem recuado. Na página que você consultar, se você vir as fontes da página, verá que ela não usa CODE, mas usa outros delimitadores HTML.
            Não é contra o código que você colocou, mas sim apontando uma falha no sistema de postagem deste site. O que, talvez, os administradores possam consertar.
            Quando falo sobre tags, obviamente estou falando sobre HTML, não Python. Em qualquer caso, se você colocar código sem indentação no Python, ele simplesmente não funcionará. Se um novato vier e copiar o código conforme aparece nesta postagem e tentar executá-lo, ele falhará. Você pode estar frustrado por ser um novato. Novamente, a culpa não é sua; e na minha resposta anterior imediata o que fiz foi dar uma maneira de resolver o problema a partir do nível de usuário que posta.

          3.    marianogaudice dito

            Você está absolutamente certo, eu deveria ter enviado fotos em vez de copiar o código.
            para mostrar como as instruções são ordenadas corretamente no PyGTK 3.

  7.   Felipe dito

    Para programar com python, recomendo usar Eclipse com o plugin PyDev, ou Pychar m

  8.   Luís dito

    Como comentado acima, é exatamente por isso que não gosto de python, por causa do problema de indentação. Como vimos, copiar e colar não funcionará, o que não acontece com outras linguagens como C, Java, PHP, etc.

    A questão da legibilidade, aplicamos um embelezador de código (como http://indentcode.net/ ) e pronto,

    O feio está consertado, mas se não houver recuo e a lógica for alterada, a gente soa ...

  9.   Carlos dito

    Eu sou novo no PyGTK, é possível interagir com scripts de shell neste idioma?

    1.    Olá dito

      Obrigado pelo tutorial.

      Saudações.