Bonjour,

J'essaye de mettre un menu contextuel lorsque je clique sur une ligne de mon QTableWidget, mais sans succès. Avec la meme technique, j'ai pourtant réussi à le faire pour un QTableView.

Ci dessous je vous mets un code simplifié. Le tableau s'affiche, mais il ne se passe rien et je n'ai pas d'erreur... Du coup je ne vois pas comment résoudre mon problème. Pouvez-vous m'aider à comprendre?

Merci d'avance

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#! /usr/bin/python
# -*-coding:utf-8 -*-
 
from PyQt4 import QtGui
from PyQt4.QtCore import SIGNAL
import sys
 
 
class Main(QtGui.QMainWindow):
 
    def __init__(self, parent=None):
        """Initialise la fenêtre"""
        super(Main, self).__init__(parent)
        #QTableWidget display
        self.QTWidget = QtGui.QTableWidget(self)
        self.QTWidget.setFixedWidth(400)
        self.QTWidget.setFixedHeight(400)
 
        self.QTWidget.setAlternatingRowColors(True)
        self.QTWidget.setRowCount(3)
        self.QTWidget.setColumnCount(3)
 
        for i in range(3):
            print 'i', i
            for j in range(3):
                txt = str(i) + ' - ' + str(j)
                item = QtGui.QTableWidgetItem(txt, 2)
                self.QTWidget.setItem(j, i, item)
 
        self.createActions()
        self.createConnexions()
 
    ################################## Context Menu for RefView ###############
    def createActions(self):
        self.action_clearDate = QtGui.QAction(u"Enlever la date", self)
 
    def createConnexions(self):
        self.connect(
            self.QTWidget,
            SIGNAL("customContextMenuRequested(const QPoint &)"),
            self.viewContextMenu)
 
        self.connect(
            self.action_clearDate,
            SIGNAL("triggered()"),
            lambda: self.clearDate(self.QTWidget))
 
    def viewContextMenu(self, p):
        menu = QtGui.QMenu(self.QTWidget)
        menu.addAction(self.action_clearDate)
        menu.exec_(self.QTWidget.mapToGlobal(p))
 
    def clearDate(self, widget):
        print 'OK -> TODO'
 
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()
    main.raise_()
    sys.exit(app.exec_())