Exemplo usando Python e Qt3


Definição da Interface


Foi usado aqui o Qt Designer 3.3.8b. Os passos são bem simples.

  • Ao iniciar o programa, na janela de "New File", escolha "Main Window".
  • Redimensione a área do form1 para ficar do tamanho desejado.
  • Insira um comboBox. Dê um duplo-clique e insira as duas opções "Little Hello" e "Big Hello".
  • Insira um textLabel. Dê um duplo-clique e escreva "<small>little Hello World.</small>"

QtDesignerHelloWorld.png

  • Agora vá no menu Edit e então Connections.
  • Insira uma nova conexão entre o comboBox1 e o Form1, com o sinal "activated". Para preencher o campo SLOT, primeiro vá em Edit Slots, e insira um novo SLOT. Chame-o de comboClicado(const QString&). Clique Ok, voltando para Connections, e complete a conexão.

QtDesignerHelloWorld-connections.png

  • Salve e feche o Qt. Você não precisa mais dele.

O arquivo gravado pelo Qt é o form1.ui:

<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>Form1</class>
<widget class="QMainWindow">
    <property name="name">
        <cstring>Form1</cstring>
    </property>
    <property name="geometry">
        <rect>
            <x>0</x>
            <y>0</y>
            <width>220</width>
            <height>214</height>
        </rect>
    </property>
    <property name="caption">
        <string>Form1</string>
    </property>
    <widget class="QLabel">
        <property name="name">
            <cstring>textLabel1</cstring>
        </property>
        <property name="geometry">
            <rect>
                <x>20</x>
                <y>120</y>
                <width>150</width>
                <height>40</height>
            </rect>
        </property>
        <property name="text">
            <string>&lt;small&gt;Little Hello World.&lt;/small&gt;</string>
        </property>
    </widget>
    <widget class="QComboBox">
        <item>
            <property name="text">
                <string>Little Hello</string>
            </property>
        </item>
        <item>
            <property name="text">
                <string>Big Hello</string>
            </property>
        </item>
        <property name="name">
            <cstring>comboBox1</cstring>
        </property>
        <property name="geometry">
            <rect>
                <x>12</x>
                <y>20</y>
                <width>170</width>
                <height>30</height>
            </rect>
        </property>
    </widget>
</widget>
<toolbars>
</toolbars>
<connections>
    <connection>
        <sender>comboBox1</sender>
        <signal>activated(const QString&amp;)</signal>
        <receiver>Form1</receiver>
        <slot>comboClicado(const QString&amp;)</slot>
    </connection>
</connections>
<slots>
    <slot>comboClicado(const QString &amp;)</slot>
</slots>
<layoutdefaults spacing="6" margin="11"/>
</UI>

Código Python


O código Python que você escreverá será uma classe que herdará as propriedades da classe feita no Qt. Primeiro é preciso transformar o arquivo ".ui" em um arquivo python. Para isso digite:

 pyuic form1.ui > form1.py

Este comando vai gerar automaticamente o arquivo form1.py como abaixo. Não edite este arquivo, pois suas edições serão perdidas caso precise executar o Qt para modificar algo na interface.

# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'form1.ui'
#
# Created: Sex Nov 7 19:45:04 2008
#      by: The PyQt User Interface Compiler (pyuic) 3.17.4
#
# WARNING! All changes made in this file will be lost!
 
 
from qt import *
 
 
class Form1(QMainWindow):
    def __init__(self,parent = None,name = None,fl = 0):
        QMainWindow.__init__(self,parent,name,fl)
        self.statusBar()
 
        if not name:
            self.setName("Form1")
 
 
        self.setCentralWidget(QWidget(self,"qt_central_widget"))
 
        self.textLabel1 = QLabel(self.centralWidget(),"textLabel1")
        self.textLabel1.setGeometry(QRect(20,120,150,40))
 
        self.comboBox1 = QComboBox(0,self.centralWidget(),"comboBox1")
        self.comboBox1.setGeometry(QRect(12,20,170,30))
 
 
 
        self.languageChange()
 
        self.resize(QSize(220,214).expandedTo(self.minimumSizeHint()))
        self.clearWState(Qt.WState_Polished)
 
        self.connect(self.comboBox1,SIGNAL("activated(const QString&)"),self.comboClicado)
 
 
    def languageChange(self):
        self.setCaption(self.__tr("Form1"))
        self.textLabel1.setText(self.__tr("<small>Little Hello World.</small>"))
        self.comboBox1.clear()
        self.comboBox1.insertItem(self.__tr("Little Hello"))
        self.comboBox1.insertItem(self.__tr("Big Hello"))
 
 
    def comboClicado(self,a0):
        print "Form1.comboClicado(const QString&): Not implemented yet"
 
    def __tr(self,s,c = None):
        return qApp.translate("Form1",s,c)

Agora que tem a meta-classe pronta, crie um novo arquivo (que chamei de QtDesignerHelloWorld.py) e digite o seguinte código:

#!/usr/bin/env python
#File QtDesignerHelloWorld.py by Beco, 07/11/2008
#Hello World Example using Qt3 and python 2.5.2
 
import sys
from qt import *
from form1 import *
 
class HelloWorld(Form1):
  def __init__(self):
    Form1.__init__(self)
 
  def comboClicado(self,texto):
    if texto=="Little Hello":
      self.textLabel1.setText("<small>Little Hello World.</small>")
    else:
      self.textLabel1.setText("<big>Big Hello World.</big>")
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    QObject.connect(app,SIGNAL("lastWindowClosed()"),app,SLOT("quit()"))
    w = HelloWorld()
    app.setMainWidget(w)
    w.show()
    app.exec_loop()

QtDesignerHelloWorld-Editor.png

Após digitado e salvo, basta transformar em executável e rodar o programa com os comandos:

chmod +x QtDesignerHelloWorld.py
./QtDesignerHelloWorld.py

E pronto! Parabéns, você acaba de fazer o seu Hello World com Python + Qt.