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 :

QTableWidget : Rendre chekable les items de une colonne [QtGui]


Sujet :

PyQt Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut QTableWidget : Rendre chekable les items de une colonne
    Bonjour à tous,

    J'ai un petit problème avec un QTableWidget (Encore celui là ). Ce QtableWidget est simple : 3 colonnes id, x et y. Elles se remplissent lorsque l'utilisateur remplie les coordonnée x,y dans des QlinEdit. Je souhaite rendre chekable les items de ma première colonne.

    Mon soucie est que j'arrive bien à rendre chekable une unique colonne mais seulement la 3ème colonne. Après quelques tests et recherches je me tourne vers vous pour m'aider à résoudre ce problème de colonne.

    Voici le code en question :
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'EOLF_Landuse_dialog_base.ui'
    #
    # Created: Sat Nov 22 06:25:46 2014
    #      by: PyQt4 UI code generator 4.10.2
    #
    # WARNING! All changes made in this file will be lost!
     
    from PyQt4 import QtCore, QtGui
     
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s
     
    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)
     
    class Ui_EOLF_LanduseDialogBase(QtGui.QDialog):
        def __init__(self, parent=None):
            super(Ui_EOLF_LanduseDialogBase, self).__init__(parent)
            #variable initial
            self.listXY_item=[]
            self.colX=[]
            self.colY=[]
            self.listXY = []
     
            self.setObjectName(_fromUtf8("EOLF_LanduseDialogBase"))
            self.resize(490, 585)
            self.button_box = QtGui.QDialogButtonBox(self)
            self.button_box.setGeometry(QtCore.QRect(120, 550, 341, 32))
            self.button_box.setOrientation(QtCore.Qt.Horizontal)
            self.button_box.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
            self.button_box.setObjectName(_fromUtf8("button_box"))
            self.gpb_plugin = QtGui.QGroupBox(self)
            self.gpb_plugin.setGeometry(QtCore.QRect(10, 390, 471, 151))
            self.gpb_plugin.setObjectName(_fromUtf8("gpb_plugin"))
            self.gridLayoutWidget = QtGui.QWidget(self.gpb_plugin)
            self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 30, 451, 121))
            self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
            self.gridLayout_plugin = QtGui.QGridLayout(self.gridLayoutWidget)
            self.gridLayout_plugin.setMargin(0)
            self.gridLayout_plugin.setObjectName(_fromUtf8("gridLayout_plugin"))
            self.line_3 = QtGui.QFrame(self.gridLayoutWidget)
            self.line_3.setFrameShape(QtGui.QFrame.HLine)
            self.line_3.setFrameShadow(QtGui.QFrame.Sunken)
            self.line_3.setObjectName(_fromUtf8("line_3"))
            self.gridLayout_plugin.addWidget(self.line_3, 2, 4, 1, 1)
            self.lnE_Main = QtGui.QLineEdit(self.gridLayoutWidget)
            self.lnE_Main.setObjectName(_fromUtf8("lnE_Main"))
            self.gridLayout_plugin.addWidget(self.lnE_Main, 2, 7, 1, 1)
            self.checkBox_Buffer = QtGui.QCheckBox(self.gridLayoutWidget)
            self.checkBox_Buffer.setObjectName(_fromUtf8("checkBox_Buffer"))
            self.gridLayout_plugin.addWidget(self.checkBox_Buffer, 0, 0, 1, 1)
            self.lnE_Sum = QtGui.QLineEdit(self.gridLayoutWidget)
            self.lnE_Sum.setObjectName(_fromUtf8("lnE_Sum"))
            self.gridLayout_plugin.addWidget(self.lnE_Sum, 2, 2, 1, 1)
            self.checkBox_Mqin = QtGui.QCheckBox(self.gridLayoutWidget)
            self.checkBox_Mqin.setObjectName(_fromUtf8("checkBox_Mqin"))
            self.gridLayout_plugin.addWidget(self.checkBox_Mqin, 2, 5, 1, 1)
            self.checkBox_Opt2 = QtGui.QCheckBox(self.gridLayoutWidget)
            self.checkBox_Opt2.setObjectName(_fromUtf8("checkBox_Opt2"))
            self.gridLayout_plugin.addWidget(self.checkBox_Opt2, 0, 5, 1, 1)
            self.label_3 = QtGui.QLabel(self.gridLayoutWidget)
            self.label_3.setObjectName(_fromUtf8("label_3"))
            self.gridLayout_plugin.addWidget(self.label_3, 2, 3, 1, 1)
            self.checkBox_Sum = QtGui.QCheckBox(self.gridLayoutWidget)
            self.checkBox_Sum.setObjectName(_fromUtf8("checkBox_Sum"))
            self.gridLayout_plugin.addWidget(self.checkBox_Sum, 2, 0, 1, 1)
            self.checkBox_Opt1 = QtGui.QCheckBox(self.gridLayoutWidget)
            self.checkBox_Opt1.setObjectName(_fromUtf8("checkBox_Opt1"))
            self.gridLayout_plugin.addWidget(self.checkBox_Opt1, 0, 6, 1, 1)
            self.line_2 = QtGui.QFrame(self.gridLayoutWidget)
            self.line_2.setFrameShape(QtGui.QFrame.VLine)
            self.line_2.setFrameShadow(QtGui.QFrame.Sunken)
            self.line_2.setObjectName(_fromUtf8("line_2"))
            self.gridLayout_plugin.addWidget(self.line_2, 0, 1, 1, 1)
            self.line = QtGui.QFrame(self.gridLayoutWidget)
            self.line.setFrameShape(QtGui.QFrame.HLine)
            self.line.setFrameShadow(QtGui.QFrame.Sunken)
            self.line.setObjectName(_fromUtf8("line"))
            self.gridLayout_plugin.addWidget(self.line, 1, 0, 1, 8)
            self.label_2 = QtGui.QLabel(self.gridLayoutWidget)
            self.label_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
            self.label_2.setObjectName(_fromUtf8("label_2"))
            self.gridLayout_plugin.addWidget(self.label_2, 0, 2, 1, 1)
            self.gpb_xy = QtGui.QGroupBox(self)
            self.gpb_xy.setGeometry(QtCore.QRect(10, 150, 471, 221))
            self.gpb_xy.setObjectName(_fromUtf8("gpb_xy"))
            self.gridLayoutWidget_2 = QtGui.QWidget(self.gpb_xy)
            self.gridLayoutWidget_2.setGeometry(QtCore.QRect(10, 20, 441, 201))
            self.gridLayoutWidget_2.setObjectName(_fromUtf8("gridLayoutWidget_2"))
            self.gridLayout_xy = QtGui.QGridLayout(self.gridLayoutWidget_2)
            self.gridLayout_xy.setMargin(0)
            self.gridLayout_xy.setObjectName(_fromUtf8("gridLayout_xy"))
            self.label_y = QtGui.QLabel(self.gridLayoutWidget_2)
            self.label_y.setAlignment(QtCore.Qt.AlignCenter)
            self.label_y.setObjectName(_fromUtf8("label_y"))
            self.gridLayout_xy.addWidget(self.label_y, 0, 1, 1, 1)
            self.lnE_y = QtGui.QLineEdit(self.gridLayoutWidget_2)
            self.lnE_y.setObjectName(_fromUtf8("lnE_y"))
            self.lnE_y.clear()
            self.gridLayout_xy.addWidget(self.lnE_y, 1, 1, 1, 1)
            self.bnt_addXY = QtGui.QPushButton(self.gridLayoutWidget_2)
            self.bnt_addXY.setObjectName(_fromUtf8("bnt_addXY"))
            self.bnt_addXY.setEnabled(False)
            self.gridLayout_xy.addWidget(self.bnt_addXY, 1, 2, 1, 1)
            self.lnE_x = QtGui.QLineEdit(self.gridLayoutWidget_2)
            self.lnE_x.setObjectName(_fromUtf8("lnE_x"))
            self.lnE_x.clear()
            self.gridLayout_xy.addWidget(self.lnE_x, 1, 0, 1, 1)
            self.verticalLayout_xy = QtGui.QVBoxLayout()
            self.verticalLayout_xy.setObjectName(_fromUtf8("verticalLayout_xy"))
            self.checkBox_all = QtGui.QCheckBox(self.gridLayoutWidget_2)
            self.checkBox_all.setObjectName(_fromUtf8("checkBox_all"))
            self.verticalLayout_xy.addWidget(self.checkBox_all)
            self.bnt_Delete = QtGui.QPushButton(self.gridLayoutWidget_2)
            self.bnt_Delete.setObjectName(_fromUtf8("bnt_Delete"))
            self.verticalLayout_xy.addWidget(self.bnt_Delete)
            self.bnt_loadXY = QtGui.QPushButton(self.gridLayoutWidget_2)
            self.bnt_loadXY.setEnabled(False)
            self.bnt_loadXY.setObjectName(_fromUtf8("bnt_loadXY"))
            self.verticalLayout_xy.addWidget(self.bnt_loadXY)
            self.gridLayout_xy.addLayout(self.verticalLayout_xy, 2, 2, 1, 1)
            self.tableWidget_xy = QtGui.QTableWidget(self.gridLayoutWidget_2)
            self.tableWidget_xy.setObjectName(_fromUtf8("self.tableWidget_xy"))
            self.gridLayout_xy.addWidget(self.tableWidget_xy, 2, 0, 1, 2)
            self.label_x = QtGui.QLabel(self.gridLayoutWidget_2)
            self.label_x.setAlignment(QtCore.Qt.AlignCenter)
            self.label_x.setObjectName(_fromUtf8("label_x"))
            self.gridLayout_xy.addWidget(self.label_x, 0, 0, 1, 1)
            self.gpb_shp = QtGui.QGroupBox(self)
            self.gpb_shp.setGeometry(QtCore.QRect(10, 10, 471, 131))
            self.gpb_shp.setObjectName(_fromUtf8("gpb_shp"))
            self.verticalLayoutWidget = QtGui.QWidget(self.gpb_shp)
            self.verticalLayoutWidget.setGeometry(QtCore.QRect(9, 20, 441, 91))
            self.verticalLayoutWidget.setObjectName(_fromUtf8("verticalLayoutWidget"))
            self.verticalLayout_shp = QtGui.QVBoxLayout(self.verticalLayoutWidget)
            self.verticalLayout_shp.setMargin(0)
            self.verticalLayout_shp.setObjectName(_fromUtf8("verticalLayout_shp"))
            self.label = QtGui.QLabel(self.verticalLayoutWidget)
            self.label.setObjectName(_fromUtf8("label"))
            self.verticalLayout_shp.addWidget(self.label)
            self.horizontalLayout_shp = QtGui.QHBoxLayout()
            self.horizontalLayout_shp.setObjectName(_fromUtf8("horizontalLayout_shp"))
            self.btn_Browse = QtGui.QPushButton(self.verticalLayoutWidget)
            self.btn_Browse.setObjectName(_fromUtf8("btn_Browse"))
            self.horizontalLayout_shp.addWidget(self.btn_Browse)
            self.lnE_Browse = QtGui.QLineEdit(self.verticalLayoutWidget)
            self.lnE_Browse.setObjectName(_fromUtf8("lnE_Browse"))
            self.horizontalLayout_shp.addWidget(self.lnE_Browse)
            self.btn_load= QtGui.QPushButton(self.verticalLayoutWidget)
            self.btn_load.setObjectName(_fromUtf8("btn_load"))
            self.horizontalLayout_shp.addWidget(self.btn_load)
            self.verticalLayout_shp.addLayout(self.horizontalLayout_shp)
     
            self.retranslateUi()
            QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("accepted()")), self.accept)
            QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("rejected()")), self.reject)
            #1 Evenement groupe shapefile
            self.btn_Browse.clicked.connect(self.on_browse_clicked)
            self.btn_load.clicked.connect(self.on_load_clicked)
            #2 Evenement groupe Wind farme location
            self.lnE_x.textChanged.connect(self.on_lnE_x_changed)
            self.lnE_y.textChanged.connect(self.on_lnE_y_changed)
            self.bnt_addXY.clicked.connect(self.on_add_clicked)
            self.tableWidget_xy.itemClicked.connect(self.on_list_selected)
     
            QtCore.QMetaObject.connectSlotsByName(self)
     
     
        def retranslateUi(self):
            self.setWindowTitle(_translate("EOLF_LanduseDialogBase", "EOLF_Landuse", None))
            self.gpb_plugin.setTitle(_translate("EOLF_LanduseDialogBase", "EOLF Plugin", None))
            self.checkBox_Buffer.setText(_translate("EOLF_LanduseDialogBase", "Buffer", None))
            self.checkBox_Mqin.setText(_translate("EOLF_LanduseDialogBase", "Main area", None))
            self.checkBox_Opt2.setText(_translate("EOLF_LanduseDialogBase", "Option 2", None))
            self.label_3.setText(_translate("EOLF_LanduseDialogBase", "m²", None))
            self.checkBox_Sum.setText(_translate("EOLF_LanduseDialogBase", "Sum area", None))
            self.checkBox_Opt1.setText(_translate("EOLF_LanduseDialogBase", "Option 1", None))
            self.label_2.setText(_translate("EOLF_LanduseDialogBase", "Simplify the geom :", None))
            self.gpb_xy.setTitle(_translate("EOLF_LanduseDialogBase", "Wind farm location", None))
            self.label_y.setText(_translate("EOLF_LanduseDialogBase", "y", None))
            self.bnt_addXY.setText(_translate("EOLF_LanduseDialogBase", "Add", None))
            self.checkBox_all.setText(_translate("EOLF_LanduseDialogBase", "Select All", None))
            self.bnt_Delete.setText(_translate("EOLF_LanduseDialogBase", "Delete", None))
            self.bnt_loadXY.setText(_translate("EOLF_LanduseDialogBase", "Load", None))
            self.label_x.setText(_translate("EOLF_LanduseDialogBase", "x", None))
            self.gpb_shp.setTitle(_translate("EOLF_LanduseDialogBase", "Shapefile", None))
            self.label.setText(_translate("EOLF_LanduseDialogBase", "Chose the shapefile to import :", None))
            self.btn_Browse.setText(_translate("EOLF_LanduseDialogBase", "Browse", None))
            self.btn_load.setText(_translate("EOLF_LanduseDialogBase", "Load", None))
     
    #1# Evenement groupe shapefile
        def on_browse_clicked( self):
            """Selection du fichier et affichage du chemin d'accès"""
            self.pathf = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home')
            #Version du chemin pour les requêtes postgresql + xrl
            self.cpathf= self.pathf.replace('\\', '/') 
            self.lnE_Browse.setText(str(self.cpathf))    
        def on_load_clicked (self):
            """Chargement du shapefile"""
            EOLF_map = QgsMapLayerRegistry.instance()
            #EOLF_map.removeAllMapLayers()
            layer = QgsVectorLayer(self.cpathf, "layer_eolf", "ogr")
            if layer.isValid():
                  EOLF_map.addMapLayer(layer)
            else:
               Qt.QtGui.QMessageBox.warning("Error Layer","Layer invalid. \n Please browse an other file")
            self.self.lnE_Browse.clear
    #2# Evenement groupe Wind farme location
        def on_lnE_x_changed (self, txt):
            if txt and self.lnE_y.text():
                self.bnt_addXY.setEnabled(True)
        def on_lnE_y_changed (self,txt):
            if txt and self.lnE_x.text():
                self.bnt_addXY.setEnabled(True)      
        def on_add_clicked(self):
            """Récupère les coordonnées et les listes """
            QtGui.QMessageBox.information(self, 'Message', "Addclicked ")
            #récupère les x et y 
            self.x =self.lnE_x.text()
            self.colX.append(self.x)
            self.lnE_x.clear()
            self.y =self.lnE_y.text()
            self.colY.append(self.y)
            self.lnE_y.clear()
            for i in range(len(self.colX)):
                id_xy = i+1
                self.listXY_item.append( str(id_xy))
            #implemente la  la liste à afficher
            self.listXY = {'A':self.listXY_item,'B':self.colX,'C':self.colY}
            print self.listXY
            #affiche le tableau de coordonnée  
            self.tableWidget_xy.setRowCount(len(self.colX))
            self.tableWidget_xy.setColumnCount(len(self.listXY))
            self.tableWidget_xy.setHorizontalHeaderLabels(['id','X','Y'])
     
            n = 0
            for i in self.listXY:
                m = 0
                for j in self.listXY[i]:
                    self.item = QtGui.QTableWidgetItem(j)
                    self.tableWidget_xy.setItem(m, n, self.item)
                    m += 1
                n += 1
     
            for i in range(self.tableWidget_xy.rowCount()):
                for j in range(self.tableWidget_xy.columnCount()):
                    if j == 0 :
                        self.item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
                        self.item.setCheckState(QtCore.Qt.Checked)
                        self.item.setSelected(False)
     
     
        def on_list_selected(self):
            if item.checkState():
                pass
    Merci d'avance pour vos conseils !

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà un petit code qui fait ce que tu souhaites (case à cocher sur n'importe quelle colonne):

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from __future__ import division
    # Python 2.7
     
    import sys
    from PyQt4 import QtCore, QtGui
     
    #############################################################################
    class Fenetre(QtGui.QWidget):
        def __init__(self, parent=None):
            super(Fenetre, self).__init__(parent)
     
            # créer le tableau
            self.table = QtGui.QTableWidget(self)
            nl = 5 # nombre de lignes
            nc = 3 # nombre de colonnes
            self.table.setColumnCount(nc)
            self.table.setRowCount(nl)
     
            # remplir toutes les cases de la table
            for i in xrange(0, nl): # toutes les lignes
                for j in xrange(0, nc): # toutes les colonnes
                    if j==1:
                        #case à cocher dans la 2éme colonne (indice 1)
                        """
                        # 1ère solution: case à cocher calée à gauche dans sa case
                        box = QtGui.QCheckBox(u"")
                        self.table.setCellWidget(i, j, box)
                        """
                        # 2ème solution: case à cocher au milieu de sa case
                        wdg = QtGui.QWidget()
                        box = QtGui.QCheckBox(u"")
                        layout = QtGui.QGridLayout(wdg)
                        layout.addWidget(box)
                        layout.setAlignment(QtCore.Qt.AlignCenter)
                        layout.setContentsMargins(0,0,0,0)
                        wdg.setLayout(layout)
                        self.table.setCellWidget(i, j, wdg)
                    else:    
                        # remplir les colonnes non-QCheckBox
                        item = QtGui.QTableWidgetItem("case %d,%d" % (i,j))
                        self.table.setItem(i, j, item)
     
            # option: régler la hauteur des lignes en fonction de leur contenu
            self.table.resizeRowsToContents()
            # option: régler la largeur des colonnes en fonction de leur contenu
            self.table.resizeColumnsToContents()
     
            # positionne le tablewidget dans la fenêtre
            posit = QtGui.QGridLayout()
            posit.addWidget(self.table, 0, 0)
            self.setLayout(posit)
     
    #############################################################################
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        fen = Fenetre()
        fen.show()
        sys.exit(app.exec_())
    J'ai mis un bonus dans ce code: quand on met un QCheckBox dans une case de façon normale, on fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                        box = QtGui.QCheckBox(u"")
                        self.table.setCellWidget(i, j, box)
    Mais le résultat n'est pas chouette: la case à cocher est calée à gauche, même quand elle n'a pas de texte associé.

    Pour centrer la case à cocher dans sa case, on peut mettre le QCheckBox centré dans un QWidget avec un QGridLayout, et placer ce QWidget dans la case. C'est beaucoup plus esthétique. Ça donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                        wdg = QtGui.QWidget()
                        box = QtGui.QCheckBox(u"")
                        layout = QtGui.QGridLayout(wdg)
                        layout.addWidget(box)
                        layout.setAlignment(QtCore.Qt.AlignCenter)
                        layout.setContentsMargins(0,0,0,0)
                        wdg.setLayout(layout)
                        self.table.setCellWidget(i, j, wdg)

    Maintenant, il me semble que tu as un problème plus grave: tu utilises le code issu d'un QtDesigner directement pour coder: c'est une très mauvaise idée, car si tu modifies un petit peu le dessin de ta fenêtre avec QtDesigner, tu devras tout recommencer. C'est d'ailleurs bien marqué sur la page:

    # WARNING! All changes made in this file will be lost!
    Il faut t'organiser pour créer ton code sur un autre fichier et IMPORTER cette page issue de QtDesigner. Si tu ne vois pas comment faire, dis-le!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Merci tytamos !
    C'est parfaitement ce que je voulais ! L'idée était là mais la méthode manquais un peu d'expérience je pense ^^

    Il faut t'organiser pour créer ton code sur un autre fichier et IMPORTER cette page issue de QtDesigner.
    En effet je sais pas du tout ce comment faire cela. Je veux bien un petit conseil

    Merci encore !

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par aurelie.guegan.15 Voir le message
    En effet je sais pas du tout ce comment faire cela. Je veux bien un petit conseil
    Je ne sais pas s'il existe une méthode universelle, mais voilà comment moi je fais:

    Tout de qui concerne un même programme se trouve dans un répertoire créé pour cela. Ce répertoire est dans un endroit où on fait du développement (par exemple dans le "home" utilisateur) mais jamais à l'endroit où Python est installé!

    Dans ce répertoire, j'ai:

    - le programme principal: "monprogramme.py"

    - le dessin de la fenêtre issue de QtDesigner que j'appelle: "monprogramme_ui.ui"

    - un fichier .bat (sous Windows) pour convertir le fichier .ui en .py que j'appelle: "monprogramme_ui.bat" et qui contient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pyuic4 monprogramme_ui.ui -o monprogramme_ui.py
    - le fichier issu de cette commande: "monprogramme_ui.py"

    Prenons pour exemple que j'ai défini une fenêtre "QWidget" sous QtDesigner. Voilà comment je l'importe dans le programme principal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    from PyQt4 import QtCore, QtGui
    from monprogramme_ui import Ui_Form # importation de la fenêtre issue de QtDesigner
     
    class Mafenetre(QtGui.QWidget, Ui_Form):
        def __init__(self, parent=None):
            super(Mafenetre, self).__init__(parent)
            self.setupUi(self)
     
    ...
    Après ce code et dans la classe, tous les objets définis dans QtDesigner sont accessibles sous leur nom, précédés de self. On peut ainsi compléter la configuration des objets et les utiliser.

    A noter qu'on fait ici un héritage multiple, qui n'est acceptable que parce que la classe Ui_Form définie dans QtDesigner hérite de object (de Python) et non de QObject (de PyQt4).

    A chaque fois qu'on reprendra le dessin de la fenêtre dans QtDesigner, il suffira d'exécuter de nouveau le fichier .bat (fichier _ui.ui => fichier _ui.py), de modifier si nécessaire le programme principal (en fonction des modifications faites) et d'exécuter à nouveau. Sous Windows, il suffit simplement de double-cliquer sur le fichier .bat dans une fenêtre du Windows Explorer.

    Petit complément:

    Au fur et à mesure qu'on développe, on crée des fonctions et des classes réutilisables: ça permet d'aller plus vite dans les développements suivants. En ce qui me concerne, je crée un sous-répertoire dans le répertoire du programme, que j'appelle "biblio" (pour "bibliothèque"). Je lui met un fichier __init__.py vide pour qu'il soit considéré par Python comme un "package", et je lui place tous mes modules persos utilisés par le programme. J'importe ces modules dans le programme principal avec des lignes comme: "from biblio.monmodule import xxx, yyy, zzz".

    Ok?
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Oui c'est plutôt claire sur le principe.

    j'ai une question concernant le fichier .bat. Pour me moment je me sert directement du shell pour passer de .ui à .py. Comment créer un .bat ?

    Après mon cas est peu être un peu particulié car je suis sur le développement de deux plugin pour le logiciel QGIS et la base du plugin est générer automatiquement via le logiciel lui même. Certes après je modifie surement de la mauvaise façon mes fichiers car l'on m'a jamais montré les bonnes méthodes. C'est le soucie de autodidaxie, 6 mois de stage c'est un peu court pour avoir une bonne expérience dans ce domaine malheureusement lorsque l'on commence avec une base médiocre en java à l'origine^^

    Sinon j'ai une autre petite question sur le Qtable Widget :
    j'aimerais avoir la possibilité de le vider et de supprimer toutes les lignes et de le re-remplir à ma guise (via un v=bouton delete).
    j'ai fait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        def on_delete_clicked(self):
            self.listXY_id =[]
            self.listXY =[]
            for i in range(self.tableWidget_xy.rowCount()+1):
                self.tableWidget_xy.removeRow(i)
    J'ai toujours une ligne qui reste dans mon table et lorsque je rajoute une ligne les anciennes ré-apparaissent.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Citation Envoyé par aurelie.guegan.15 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        def on_delete_clicked(self):
            self.listXY_id =[]
            self.listXY =[]
            for i in range(self.tableWidget_xy.rowCount()+1):
                self.tableWidget_xy.removeRow(i)
    J'ai toujours une ligne qui reste dans mon table et lorsque je rajoute une ligne les anciennes ré-apparaissent.
    En faisant cela, "i" contiendra le numéro de la ligne a supprimer.
    Mais une fois la ligne 0 supprimée la ligne 1 deviendra 0... et vous allez supprimez des lignes qui n'existent plus en sautant celles qui sont encore là
    Essayez avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           for i in range(self.tableWidget_xy.rowCount()):
                self.tableWidget_xy.removeRow(0)

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Super merci beaucoup ! j'ai plus de problème avec ce delete !

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par aurelie.guegan.15 Voir le message
    j'ai une question concernant le fichier .bat. Pour me moment je me sert directement du shell pour passer de .ui à .py. Comment créer un .bat ?
    Sous Windows, un fichier .bat est un simple fichier texte qui contient des lignes de commande destinées à la console cmd.exe livrée avec Windows.

    On le crée avec, par exemple, notepad++ (http://notepad-plus-plus.org/fr/) ou n'importe quel autre éditeur de texte (mais pas un "traitement de texte" comme word!!!)

    Et, dans le cas qui nous occupe ici, on y place la ligne que j'ai donnée plus haut (avec le vrai nom des fichiers .ui et .py)

    Et comme je l'ai dit, il suffit de double-cliquer sur son nom dans le Windows Explorer pour lancer son exécution. La console s'affiche alors un court instant et c'est terminé. Si on veut que la console reste à la fin du traitement pour voir les éventuels messages d'erreur, il suffit d'ajouter "pause" en dernière ligne.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

Discussions similaires

  1. rendre negatives toutes les valeurs d'une colonne
    Par bsoufflet dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/11/2009, 11h46
  2. Réponses: 2
    Dernier message: 15/05/2007, 10h34
  3. rendre les item d'une JList transparent
    Par barbiche dans le forum Composants
    Réponses: 1
    Dernier message: 04/05/2007, 13h51
  4. Effacer toutes les données d'une colonne
    Par denisfavre dans le forum Access
    Réponses: 5
    Dernier message: 12/10/2005, 15h20
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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