IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Dans une boucle, connection de signaux avec une fonction lambda [QtGui]


Sujet :

PyQt Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inactif
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Dans une boucle, connection de signaux avec une fonction lambda
    Bonsoir

    J'utilise PyQt5. Dans une fenêtre, je veux créer des boutons dans une boucle sur une liste. À titre d'exemple, j'ai extrait de mon code le petit script suivant (je suis fatigué de l'emploi toujours croissant de l'anglais dans notre langue et c'est la raison pour laquelle j'ai opté ici pour le grec ancien, langue, certes morte, dont Donald ne doit même pas avoir jamais entendu parler)

    À la prévisualisation du message, je constate que l'indentation (par tabulations) n'est pas reproduite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    #
    # 
    
    from PyQt5 import QtCore, QtWidgets
    from PyQt5.QtWidgets import QMainWindow, QWidget, QLabel,  QLineEdit,  QPushButton, QApplication
    from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QMessageBox
    
    class Κοινή(QtWidgets.QWidget):
    	def __init__(ἁυτόν):
    		super(Κοινή,ἁυτόν).__init__()
    	def init(ἁυτόν):
    		zc=QHBoxLayout(ἁυτόν)
    		zc.addStretch()
    		ἁυτόν.lesboutons=[('Quitter','quit', True), ('Auteurs', 'aut', True), ('Vocabulaire', 'vocab', False), ('Textes', 'texte', True) ]
    		for tpl in ἁυτόν.lesboutons:
    			btn=QPushButton(tpl[0])
    			btn.setObjectName(tpl[1])
    			btn.setEnabled(tpl[2])
    			btn.clicked.connect(lambda : ἁυτόν.execut(tpl[1]))
    			btn.clicked.connect(lambda cde=tpl[1] : ἁυτόν.execut(cde))			
    			zc.addWidget(btn)
    			zc.addStretch()
    	def execut(ἁυτόν, cde):
    		print(cde)
    def afficher(ἁυτόν, ὄνομα, χωρίον=None):
    	if χωρίον==None:
    		χωρίον=(250,200,800,300)
    	ἁυτόν.setGeometry(χωρίον[0],χωρίον[1],χωρίον[2],χωρίον[3])
    	ἁυτόν.setWindowTitle(ὄνομα)
    	ἁυτόν.show()
    	
    def main(args):
    	app = QtWidgets.QApplication(args)
    	application=Κοινή()
    	application.init()
    	afficher(application,'Κοινή', [300,150,300,250])
    	app.exec()
    	return 0
    
    if __name__ == '__main__':
    	import sys
    	sys.exit(main(sys.argv))
    Au lancement s'affiche bien la fenêtre avec les 4 boutons. Lorsque je clique sur l'un des trois boutons actifs, le premier signal envoyé vers 'execut' contient comme paramètre la valeur 'texte' et le deuxième signal la valeur 'False'.

    J'ai bien trouvé dans la foire aux questions de Python la raison pour laquelle le paramètre du premier signal est toujours 'texte'. Mais je ne comprends absolument pas pourquoi le paramètre du deuxième signal est un bouléen.

    Merci à quiconque pourra me mettre sur la voie.

    Arbiel

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inactif
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Utiliser " from functools import partial"
    Bonjour

    Dans le forum anglophone de Python, il m'a été conseillé d'utiliser la fonction partial de functools et de remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    btn.clicked.connect(lambda cde=tpl[1] : ἁυτόν.execut(cde))
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    btn.clicked.connect(partial(ἁυτόν.execut, tpl[1]))
    Arbiel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec structure dans une fonction
    Par Saliman dans le forum C
    Réponses: 2
    Dernier message: 22/11/2007, 11h45
  2. Boucle dans une fonction
    Par masseur dans le forum Langage
    Réponses: 6
    Dernier message: 28/11/2006, 16h57
  3. [8i][PL/SQL] erreur avec lpad dans une fonction
    Par sali dans le forum Oracle
    Réponses: 3
    Dernier message: 16/03/2006, 06h22
  4. [PL SQL] Problème avec 'case' dans une fonction
    Par divail dans le forum Oracle
    Réponses: 14
    Dernier message: 13/03/2006, 15h50
  5. [Postgresql]Connecter à une autre base dans une fonction
    Par alex2205 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2003, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo