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 :

PySide6 : MousePressEvent dans QTableWidget


Sujet :

PyQt Python

  1. #1
    Membre à l'essai Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 23
    Points : 20
    Points
    20
    Par défaut PySide6 : MousePressEvent dans QTableWidget
    Bonjour à tous ,

    Actuellement pour un projet, je dois utiliser PySide6, et gérer des évènements lorsque j'effectue un clic-droit avec la souris dans un tableau.

    J'ai essayé d'écrire un petit script simple pour comprendre le fonctionnement, mais je ne parviens à détecter un signal uniquement lorsque la souris est utilisé dans le layout.

    Voici mon code :
    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
    from PySide6.QtCore import *
    from PySide6.QtGui import *
    from PySide6.QtWidgets import *
    import sys
     
    class Main(QWidget):
        def __init__(self, parent=None):
            QWidget.__init__(self, parent)
            layout  = QHBoxLayout(self)
            table = QTableWidget(3, 2)
            table.setMouseTracking(True)
            layout.addWidget(table)
            self.show()
     
        def mousePressEvent(self, QMouseEvent):
            #print mouse position
            print(QMouseEvent.pos())
     
    a = QApplication([])
    m = Main()
    sys.exit(a.exec_())
    Pourrez-vous, s'il-vous-plaît, m'expliquer pourquoi cela ne fonctionne pas sur le QTableWidget et comment pourrais-je remédier à cela ?

    En vous remerciant par avance.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ton mousePressEvent est celui du QWidet, pour gérer les events d'un widget particulier il faut généralement le sous-classer.
    De plus l'argument n'est pas correct (QMouseEvent)
    Par exemple:
    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
     
     
    class Main(QWidget):
        def __init__(self, parent=None):
            QWidget.__init__(self, parent)
            layout  = QHBoxLayout(self)
            table = Table(3, 2, self)
            table.setMouseTracking(True)
            layout.addWidget(table)
            self.show()
     
    class Table(QTableWidget)
        def __init__(self, rows, cols, parent=None):
            super().__init__(rows, cols, parent=parent)
     
        def mousePressEvent(self, event):
            #print mouse position
            print(event.pos())

    Pas sûr que le table.setMouseTracking(True) soit utile dans ce cas.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour

    J'ai complété l'exemple de VinsS pour montrer que le mousePressEvent se passe bien dans le QTableWidget et non pas dans les autres widgets (suffit de rajouter d'autres widgets)

    Code python : 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
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    import sys
     
    class Main(QWidget):
    	def __init__(self, *args, **kwargs):
    		QWidget.__init__(self, *args, **kwargs)
    		layout  = QGridLayout(self)
    		layout.addWidget(Table(3, 2, parent=self), 0, 0, 1, 1)		# Ligne 0, colonne 0, 1 ligne, 1 colonne
    		layout.addWidget(QTextEdit(parent=self), 0, 1, 1, 1)		# Ligne 0, colonne 1, 1 ligne, 1 colonne
    		layout.addWidget(QTextEdit(parent=self), 1, 0, 1, 2)		# Ligne 1, colonne 0, 1 ligne, 2 colonnes
    		self.show()
    	# __init__()
    # class Main
     
    class Table(QTableWidget):
    	def __init__(self, rows, cols, *args, **kwargs):
    		super().__init__(rows, cols, *args, **kwargs)
     
    	def mousePressEvent(self, event):
    		print(event.pos())
    # class Table
     
    a = QApplication(sys.argv)
    m = Main()
    sys.exit(a.exec_())

    Seul le clic dans le QTable situé en haut à gauche active l'event. Petit détail: je travaille pas avec PySide mais PyQt. Toutefois pour cet exemple il n'y a aucune différence.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/02/2010, 15h37
  2. Réponses: 1
    Dernier message: 18/01/2010, 02h30
  3. Ajout Widget dans QTableWidget
    Par Somato dans le forum Qt
    Réponses: 1
    Dernier message: 01/07/2008, 17h02
  4. Insertion widget dans QTableWidget
    Par uriotcea dans le forum Qt
    Réponses: 2
    Dernier message: 06/06/2008, 21h42
  5. [Qt4] Interdire le double clic dans QTableWidget
    Par Michaël dans le forum Qt
    Réponses: 2
    Dernier message: 14/04/2007, 21h56

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