Ir para o conteúdo

Interfaces gráficas

Interfaces gráficas de usuário

A maioria dos programas hoje em dia recebem entradas de uma interface gráfica de usuário (graphical user interfaces - GUI), que consiste em janelas com elementos gráficos como botões, menus, campos de texto, etc.

Porque no aprendemos a fazer tais programas?

  • GUI demandam uma programação extra muito complicada;
  • Programadores experientes preferem a entrada por linha de comando;
  • Programas com entradas por linha de comando ou arquivos podem ser facilmente combinados uns com os outros, o que é difícil em programas baseados em GUI.

Entrada por linha de comando provavelmente vai servir para todos os seus propósitos na sua pesquisa de pós-graduação!

A não ser que sua pesquisa envolva diretamente a programação com GUI...

Então, vamos dar uma olhada com se faz!

Um programa de conversão Celsius-Fahrenheit com GUI

Os valores em Celsius podem ser colocados como números em um campo e clicando-se em um botão "é" calcula-se a correspondente temperatura em Fahrenheit.

Para isso, vamos usar o pacote GUI do python chamado Tkinter:

import Tkinter as tk
#from Tkinter import *

root = tk.Tk() #iniciando o Tkinter

#criando o campo de entrada à esquerda
C_entry = tk.Entry(root, width=4)
C_entry.pack(side='left')
#criando o texto Celsius logo após o campo de entrada
Cunit_label = tk.Label(root, text='Celsius')
Cunit_label.pack(side='left')

def compute():
    C = float(C_entry.get())
    F = (9./5)*C + 32
    F_label.configure(text='%g' % F)

#criando o botão para calcular o resultado
compute = tk.Button(root, text=' é ', command=compute)
compute.pack(side='left', padx=4)

#criando um texto para a resposta
F_label = tk.Label(root, width=4)
F_label.pack(side='left')
#criando o texto Fahrenheit
Funit_label = tk.Label(root, text='Fahrenheit')
Funit_label.pack(side='left')

root.mainloop()

Resulta em:

Tkinter GUI

Um exemplo um pouco mais complexo usando o PyQt4

Para ilustrar um pouco mais sobre GUIs, segue um exemplo usando o PyQt4 para avaliar expressões

from __future__ import division
import sys
from math import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.browser = QTextBrowser()
        self.lineedit = QLineEdit(u"Digite uma expressão e pressione enter")
        self.lineedit.selectAll()
        layout = QVBoxLayout()
        layout.addWidget(self.browser)
        layout.addWidget(self.lineedit)
        self.setLayout(layout)
        self.lineedit.setFocus()
        self.connect(self.lineedit, SIGNAL("returnPressed()"), self.updateUi)
        self.setWindowTitle("Calcular")

    def updateUi(self):
        try:
            text = self.lineedit.text().encode('utf-8')
            self.browser.append(u"%s = %s" % (text, eval(text)))
        except:
            self.browser.append(u"%s é inválido!" % text)

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

Resulta em:

PyQt GUI