Home / Programmazione / Python / Usare il Qt Designer con PyQt
Mattepuffo

Usare il Qt Designer con PyQt

Usare il Qt Designer con PyQt

A me piace molto il framework Qt, e quindi ho deciso di buttarmi anche su PyQt, un porting di Qt per Python.

Specifico che parlo della versione 5 di Qt, ma quello che andremo a vedere vale anche per la versione 4.

In pratica vederemo come sidegnare la nostra finestra con il Qt Designer, per poi trasformare questa finestra in codice Python.

Il Qt Designer, per chi non lo sapesse, è un componente che viene installato con il Qt Creator (ma penso dipenda anche dal sistema operativo usato), e che permette appunto di creare e modificare le GUI per programmi scritti Qt.

Sulla mia Archlinux ho sia la versione 4 che la 5.

Prima di tutto installate PyQt; io ho installato la versione 5 per Python 3:

# pacman -Sy python-pyqt5

Bene, avviate il Qt Designer e create la vostra interfaccia; è tutto dragn & drop, quindi è molto semplice.

Quando deicdete di salvare l'interfaccia, verrà creato un file con estensione ui, è un formato simile all'XML.

Se stessimo programmando in Qt/C++ andrebbe bene; per Python invece non va bene.

Quindi aprite un terminale e digitate questo comando:

$ pyuic5 -x test.ui -o test.py

Verrà creato un file con dento il codice Python; nel mio caso:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(110, 100, 91, 27))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 20))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Se usate PyQt versione 4, il comando sarà pyuic4.

A questo punto avviate il file per vedere cosa avete creato:

$ python3 test.py

Considerate che io ho usato la versione 5 di PyQt e Python 3.

Ma potete usare diverse combinazioni; come anche PyQt 5 e Python 2, quello sta a voi deciderlo.

L'unica scomodità è che se volete effettuare delle modifiche con il Qt Designer, dovete stare attenti al fatto che il vostro codice personale verrà eliminato; quindi vi consiglio di fare il grosso con il Qt Designer, e le piccole modifiche a mano in Python.

Enjoy!