Na continuação do artigo anterior que mostrava como criar e executar um script em IronPython, iremos agora ver como pode ser criado um GUI (Graphical User Interface) utilizando Python e os componentes do “.NET”.
O GUI que pretendemos construir é constituido por uma janela (Form), uma caixa de texto (TextBox) e tem o seguinte aspecto:
A Microsoft agrupa “funcionalidades” (classes) em “NameSpaces” e “Assemblies”. Os “NameSpaces” são usados para organizar de forma lógica classes que estejam de alguma forma relacionada, têm também como objectivo evitar conflitos entre classes provenientes de várias fontes. As “Assemblies” são código compilado, tipicamente um ficheiro DLL e podem conter vários “NameSpaces”.
Windows Forms (WinForms) é o nome dado à API (Application Programming Interface) de interface gráfica usada nas aplicações. Esta API proporciona o acesso a elementos nativos do interface do Windows como janelas, botões, caixas de texto, labels entre muitos outros. O “.NET” possui um namespace chamado “System.Windows.Forms” que iremos usar para importar para a nossa aplicação a janela e a caixa de texto.
Na documentação online disponível na MSDN (Microsoft Developer Network) pode ver-se quais as classes que pertencem ao namespace “System.Windows.Forms” em http://msdn.microsoft.com/en-us/library/k50ex0x9.aspx. Pesquisando um pouco é fácil de encontrar dentro deste namespace a class “Form” em http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx e a class “TextBox” em http://msdn.microsoft.com/en-us/library/system.windows.forms.textbox.aspx
O código necessário para gerar esta aplicação pode ser escrito utilizando o Notepad++ e é o que se segue:
import clr
clr.AddReference('System.Windows.Forms')
clr.AddReference('System.Drawing')
from System.Windows.Forms import Application, Form, TextBox
from System.Drawing import Point
form = Form()
form.Text = 'Exemplo GUI'
#http://msdn.microsoft.com/en-us/library/system.windows.forms.textbox.aspx
#http://msdn.microsoft.com/en-us/library/a19tt6sk.aspx
posicao=Point(20,30)
texto=TextBox()
texto.Location=posicao
texto.Text='Hello World'
form.Controls.Add(texto)
Application.Run(form)
Para que um programa possa usar uma assembly/namespace, é necessário adicionar explicitamente uma referência para este. Para adicionar referências usa-se o módulo CLR e para usar o módulo CLR é necessário importá-lo. É precisamente isso que faz a primeira linha de código:
import clr
As referencias são adicionadas através do método “AddReference”. Para este programa vamos adicionar duas referências para os namespaces “System.Windows.Forms” e “System.Drawing”:
clr.AddReference('System.Windows.Forms')
clr.AddReference('System.Drawing')
Destes namespaces vamos importar a class “Application” a “Form” e a “TextBox” bem como a estrutura “Point” para tal usamos o seguinte:
from System.Windows.Forms import Application, Form, TextBox
from System.Drawing import Point
Agora que o nosso código já tem acesso a estas classes vamos instanciar (criar um objecto de um tipo) uma janela (form):
form = Form()
form.Text = 'Exemplo GUI'
O código acima também mostra como aceder e alterar a propriedade Text (Nome da janela) através do operador “.”.
De seguida vamos criar (instanciar) uma caixa de texto. O código seguinte também inicializa uma estrutura do tipo “Point” para escolhermos as coordenadas da caixa de texto em relação à janela e altera o texto para “Hello World”.
texto=TextBox()
posicao=Point(20,30)
texto.Location=posicao
texto.Text='Hello World'
As ultimas duas linhas adicionam a caixa de texto à janela e executam a aplicação:
form.Controls.Add(texto)
Application.Run(form)
Para executarmos o nosso programa assumindo que lhe chamámos “gui.py” podemos (na consola) chamar a aplicação da seguinte forma:
ipy gui.py
esta forma é mais correcta para fazer debug da aplicação.
Quanto tudo funcionar correctamente podemos executar a aplicação (através de um atalho por exemplo) com o comando:
ipyw gui.py
Usando o “ipyw” em vez do “ipy” a aplicação não vai abrir uma janela da consola quando se executa.