Bonjour,

J'ai un problème avec un QTableView pour la sélection d'items (en l’occurrence, il s'agit de lignes). Lorsque l'utilisateur utilise le clavier, il n'y a aucun problème.
Par contre, avec la souris, il en va tout autrement. S'il clique sur la première ligne dans mon exemple, cela va. Par contre, aucun moyen de sélectionner les suivantes.

J'ai dû faire une c..ie quelque part mais où ?

Quelque chose m'échappe et, j'ai beau me creuser, je ne vois rien

Quelqu'un est-il déjà tombé sur ce problème ?


PS : Voici le code utilisé :
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
 
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import sys
from PyQt4 import QtGui, QtCore
from datetime import date
 
 
class MainWidget(QtGui.QWidget):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
 
        self.model = QtGui.QStandardItemModel()
        self.view = QtGui.QTableView()
        self.setmodelHeaders([u'Numéro',u'Nom',u'Date de\n naissance'])
        self.setmodelData([
            [1,'Lagaffe',date(1963,5,9)],
            [2,'Bertrand',date(1984,8,5)],
            [3,'Carvac',date(1978,4,2)]])
        self.view.setModel(self.model)
        self.view.setMinimumSize(350,100)
        self.setviewproperties()
        lay = QtGui.QGridLayout(self)
        lay.addWidget(self.view,3,0,3,1)
        self.disp = QtGui.QLabel('')
        lay.addWidget(self.disp,4,0,4,1)
        self.view.clicked.connect(self.dispLine)
        self.setLayout(lay)
 
    def setmodelHeaders(self,headers):
        for j,header in enumerate(headers):
            pi = QtGui.QStandardItem(header)
            self.model.setHorizontalHeaderItem(j, pi)
    def setmodelData(self,data):
        for i,row in enumerate(data):
            for j,col in enumerate(row):
                item = QtGui.QStandardItem()
                item.setTextAlignment(QtCore.Qt.AlignHCenter)
                item.setEditable(False)
                if isinstance(col,date): col = QtCore.QDate(col)
                item.setData(col,QtCore.Qt.DisplayRole)
                self.model.setItem(i,j,item)
    def setviewproperties(self):
        self.view.setSelectionMode(1) # Sélection unique
        self.view.setSelectionBehavior(1) # Sélectionb de ligne
        self.view.setWordWrap(True)
    def dispLine(self,index):
        self.disp.setText("Ligne cliquée %d" %index.row())
 
if __name__== "__main__":
    app = QtGui.QApplication(sys.argv)
 
 
    w = MainWidget()
    w.show()
    sys.exit(app.exec_())
Merci d'avance

Petite précision.

La barre de défilement, qui apparaît quand on minimise la fenêtre, n'est plus
accessible elle non plus !