Afin de pouvoir personnaliser votre classeur sans détruire le classeur sur lequel travaille votre voisin, vous allez tout d'abord aller dans le menu File puis Make a copy.... Renommez le classeur en ajoutant votre nom à la fin du nom de fichier par exemple.

Les dialogues

Lien vers la doc

On commence bien sûr par rappeler le lien vers la doc PySide...

https://deptinfo-ensip.univ-poitiers.fr/ENS/pyside-docs/index.html

On importe les librairies Qt comme d'habitude

In [ ]:
from PySide.QtCore import *
from PySide.QtGui import *
import sys

Le but de l'activité

Nous souhaitons réaliser une application demandant à l'utilisateur des renseignements de différents types :

Capture

Pour implémenter ce dialogue avec l'utilisateur, nous utiliserons des dialogues prédéfinis. On peut voir ces dialogues comme une version améliorée de la commande input.

Exemples de dialogues

L'utilisation de ces dialogues n'est guerre plus compliquée que la commande input. Plongeons dans le vif du sujet et regardons comment ce code fonctionne.

In [ ]:
class MainWindow(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self, parent)
        
        self.myNameButton=QPushButton("Nom")
        self.myAgeButton=QPushButton("Age")
        self.myChoiceButton=QPushButton("Choix")
        self.myColorButton=QPushButton("Couleur")
        
        self.myNameLbl=QLabel("Ceci est mon nom...")
        self.myAgeLbl=QLabel("Ceci est mon age ...")
        self.myChoiceLbl=QLabel("Ceci est mon choix ...")
        self.myColorLbl=QLabel("Ceci est ma couleur ...")
        # Connection des boutons
        self.myNameButton.clicked.connect(self.showNameDialog)    
        self.myAgeButton.clicked.connect(self.showAgeDialog)    
        self.myChoiceButton.clicked.connect(self.showChoiceDialog)   
        self.myColorButton.clicked.connect(self.showColorDialog)         
        self.setWindowTitle("Test dialogues")
        
        # Mise en page des widget avec un Layout Form
        layout=QFormLayout()
        layout.addRow(self.myNameButton,self.myNameLbl)
        layout.addRow(self.myAgeButton,self.myAgeLbl)
        layout.addRow(self.myChoiceButton,self.myChoiceLbl)
        layout.addRow(self.myColorButton,self.myColorLbl)
        self.setLayout(layout)
        
    def showNameDialog(self):
        text,ok=QInputDialog.getText(self,'Entrée de type Texte','Quel est votre nom ?')
        if ok:
            self.myNameLbl.setText("Mon nom est %s" % text)
    def showAgeDialog(self):
        age,ok=QInputDialog.getInteger(self,'Entrée de type Nombre','Quel est votre age ?')
        if ok:
            self.myAgeLbl.setText("J'ai %i ans" % age)
    def showChoiceDialog(self):
        strList=['Crême glacée','Chocolats', 'Chantilly' ]
        text,ok=QInputDialog.getItem(self,'Entrée de type Liste','Quel est votre dessert favori ?',strList)
        if ok:
            self.myChoiceLbl.setText("Mon dessert est %s" % text)
    def showColorDialog(self):
        color=QColorDialog.getColor()
        if color.isValid():
            self.myColorLbl.setStyleSheet("background-color: %s" % color.name())
            self.myColorLbl.setText(color.name())
In [ ]:
try:
    app = QApplication(sys.argv)
except RuntimeError:
    app=QApplication.instance()
form = MainWindow()
form.show()
app.exec_()

Entrée de type texte

Voici à quoi cela ressemble :

Ca vous semble compliqué à réaliser ? pas de panique ! le code tient en une ligne !

In [ ]:
text,ok=QInputDialog.getText(form,'Entrée de type Texte','Quel est votre nom ?')

Le premier argument est la fenêtre parent. Ici j'ai indiqué form. En général, self suffit comme dans l'exemple.

On récupère ensuite une chaîne de caractère et un booléen indiquant si on a validé ou annulé. Tout simplement.

In [ ]:
print(text)
print(ok)

Entrée de type Nombre

Voici à quoi cela ressemble :

Le principe est similaire au dialogue précédent.

In [ ]:
age,ok=QInputDialog.getInteger(form,'Entrée de type Nombre','Quel est votre age ?')

Le premier argument est encore la fenêtre parent.

On récupère ensuite un entier et un booléen indiquant si on a validé ou annulé.

On peut récupérer aussi des nombres décimaux via la méthode getDouble().

Bien sur pour de plus amples informations, ... RTFM

In [ ]:
print(age)

Entrée de type Liste

Cette fois-ci on spécifie dans une liste des choix proposés à l'utilisateur :

Le principe est similaire au dialogue précédent.

In [ ]:
strList=['Crême glacée','Chocolats', 'Chantilly' ]
text,ok=QInputDialog.getItem(form,'Entrée de type Liste','Quel est votre dessert favori ?',strList)
In [ ]:
print(text)

Dialogue de choix de couleur

C'est encore plus simple !

On récupère la couleur sous forme d'un objet QColor

In [ ]:
color=QColorDialog.getColor()
In [ ]:
print(color)
print(color.name())

Et bien plus encore...

Il y a des dialogues pour tout, précabnlés dans le FrameWork Qt. Si vous voulez ouvrir ou enregistrer un fichier, alors QFileDialog est votre ami. RTFM

In [ ]:
filename=QFileDialog.getOpenFileName()
print(filename)
In [ ]: