La FAQ PyQt & PySide
La FAQ PyQt & PySideConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 38, dernière mise à jour : 29 août 2021
La manière la plus simple de créer une application graphique en PySide est d'utiliser un QWidget.
Toute application PySide ou PyQt doit commencer par la création d'un objet QApplication ; nous créons ensuite la fenêtre de notre application grâce à l'objet QWidget. Par la suite, il est possible de la redimensionner, de lui donner un titre… La commande show() permet de faire apparaître cette fenêtre. La commande sys.exit(app.exec_()) correspond au mainloop de notre application. Cette ligne permettra entre autre de correctement quitter l'application le moment venu.
"""Création de l'objet application nécessaire à notre projet"""
app =
QtGui.QApplication
(
sys.argv)
"""Création de l'objet widget qui sera la fenêtre principale de notre application.
Nous allons aussi la dimensionner tel que l = 300 et h = 200.
Puis nous lui donnons un titre."""
widget =
QtGui.QWidget
(
)
widget.resize
(
300
, 200
)
widget.setWindowTitle
(
'Application simple'
)
"""Commande nécessaire pour faire apparaitre la fenêtre"""
widget.show
(
)
"""Lancement de la boucle principale (mainloop dans d'autre bibliothèque). La méthode sys.exit assurera un arrêt propre de l'application"""
sys.exit
(
app.exec_
(
))
Cela dit, cette façon de faire ne sera pas la plus simple à utiliser dans le futur. Python étant un langage orienté objet, il est préférable de rester dans cette logique dès le début. Ainsi, au code ci-dessus, on préfèrera celui-ci :
import
sys
from
PySide import
QtGui
"""Création de la classe Frame, héritée de QWidget, puis création des constructeurs respectifs."""
class
Frame
(
QtGui.QWidget):
def
__init__
(
self, parent=
None
):
QtGui.QWidget.__init__
(
self, parent)
self.resize
(
600
,500
)
self.setWindowTitle
(
'Application simple'
)
"""Modification de la font de la fenêtre. Ceci modifiera aussi la font des widget enfants"""
self.setFont
(
QtGui.QFont
(
"Verdana"
, 18
, QtGui.QFont.Bold))
"""Création d'un QLabel, qui permet d'afficher du texte sur la fenêtre, puis positionnement et dimensionnement de celui-ci"""
self.label =
QtGui.QLabel
(
"Hello World"
, self)
self.label.setGeometry
(
10
, 350
, 200
, 25
)
app =
QtGui.QApplication
(
sys.argv)
frame =
Frame
(
)
frame.show
(
)
sys.exit
(
app.exec_
(
))
La méthode la plus simple est d'utiliser un QLabel conjointement à un QPixmap.
QPixmap est la classe de Qt qui permet d'afficher une image existante. Une autre classe permet de travailler avec les images, il s'agit de QImage. Cependant, cette dernière est utilisée pour travailler directement sur les pixels et peut aussi être utilisée comme un outil de peinture, même si ce n'est pas son objectif principal. Dans ce cas c'est donc bien QPixmap dont on a besoin.
# -*- coding: iso-8859-1 -*-
import
sys
from
PySide import
QtGui, QtCore
##Création de la fenêtre principale.
class
Frame
(
QtGui.QWidget):
def
__init__
(
self, parent=
None
):
QtGui.QWidget.__init__
(
self, parent)
self.resize
(
600
,500
)
size_ecran =
QtGui.QDesktopWidget
(
).screenGeometry
(
)
size_fenetre =
self.geometry
(
)
label =
QtGui.QLabel
(
""
, self)
label.move
(
100
, 100
)
label.setPixmap
(
QtGui.QPixmap
(
"img.JPG"
))
label.clicked.connect
(
quit)
app =
QtGui.QApplication
(
sys.argv)
frame =
Frame
(
)
frame.show
(
)
sys.exit
(
app.exec_
(
))
Il existe trois fonctions indispensables pour réaliser ces actions :
- move(x,y) déplacera le widget associé aux coordonnées (x,y) ;
- resize(l,h) donnera la taille (l,h) au widget ;
- setGeometry(x,y,l,h) placera le widget associé aux coordonnées (x,y) et lui donnera la taille (l,h).
import
sys
from
PySide import
QtGui
class
Frame
(
QtGui.QWidget):
def
__init__
(
self, parent=
None
):
QtGui.QWidget.__init__
(
self, parent)
self.resize
(
600
,500
)
"""Permet uniquement de dimensionner la fenêtre selon les paramètres l = 600 et h = 500"""
self.move
(
200
, 300
)
"""Déplace la fenêtre aux coordonnées x = 200 et y = 300"""
self.btn =
QtGui.QPushButton
(
"Hello World"
, self)
self.btn.setGeometry
(
10
, 350
, 200
, 25
)
"""Positionne le bouton au point (10,350) et de lui donner la taille (200,25)"""
app =
QtGui.QApplication
(
sys.argv)
frame =
Frame
(
)
frame.show
(
)
sys.exit
(
app.exec_
(
))