2016-12-20 2 views
0

J'ai un Qtablewidget avec 3 colonnes. La première colonne contient les noms d'utilisateur, les deuxième et troisième colonnes sont des cases à cocher. Je voudrais que ces cases à cocher soient des attributs pour la rangée d'utilisateurs. Par exemple Si vous regardez l'image ci-dessous, Utilisateur: bruno est marqué (a des attributs) supprimer et supprimer la maison. Je voudrais avoir une sortie comme: User Bruno marked for delete, marked for delete home. Pour ce faire, je devrais lier les utilisateurs à ces deux colonnes dont je n'ai pas la moindre idée. Comment dois-je aborder ce problème. Voici le code que j'ai déjà trouvé. Il remplit la colonne des utilisateurs à partir d'un fichier.Comment lier des lignes spécifiques à des colonnes dans un Qtablewidget

table de QtGui importation PyQt4, QtCore

class Window(QtGui.QWidget): 
    def __init__(self, rows, columns): 
     QtGui.QWidget.__init__(self) 
     self.table = QtGui.QTableWidget(rows, columns, self) 
     self.table.setHorizontalHeaderItem(0, QtGui.QTableWidgetItem("Users")) 
     self.table.setHorizontalHeaderItem(1, QtGui.QTableWidgetItem("Delete User")) 
     self.table.setHorizontalHeaderItem(2, QtGui.QTableWidgetItem("Delete User and Home")) 
     self.table.verticalHeader().hide() 
     header = self.table.horizontalHeader() 
     header.setStretchLastSection(True) 
     rowf = 0 
     with open("/home/test1/data/users") as in_file: 
       if in_file is not None: 
        users = in_file.readlines() 
       for line in users: 
        users = QtGui.QTableWidgetItem() 
        self.table.setItem(rowf, 0, users) 
        users.setText(line) 
        rowf+=1 
        in_file.close() 
     for column in range(columns): 
      for row in range(rows): 
       if column % 3: 
        item = QtGui.QTableWidgetItem(column) 
        item.setFlags(QtCore.Qt.ItemIsUserCheckable | 
            QtCore.Qt.ItemIsEnabled) 
        item.setCheckState(QtCore.Qt.Unchecked) 
        self.table.setItem(row, column, item) 
     self.table.itemClicked.connect(self.cell_was_clicked) 
     layout = QtGui.QVBoxLayout(self) 

     layout.addWidget(self.table) 
     self._list = [] 

    def cell_was_clicked(self, item): 
     #row = self.table.currentItem().row() 
     #col = self.table.currentItem().column() 
     #print "item:", item 
     #print "row=", row 
     if item.checkState() == QtCore.Qt.Checked: 
      print('"%s" Checked' % item.text()) 
      #self._list.append(item.row()) 
     else: 
      #print "(", row , ",", col, ")" 
      print('%s' % item.text()) 
      print (item.row(),item.column()) 


if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window(200, 3) 
    window.resize(400, 400) 
    window.show() 
    sys.exit(app.exec_()) 
+0

Aussi, si quelqu'un sait comment centrer les cases à cocher à l'intérieur des cellules qui seraient grands. Merci. – answerSeeker

Répondre

0

fixé comme ceci:

def cell_was_clicked(self, item): 
    if item.checkState() == QtCore.Qt.Checked: 
     user = self.table 
     delete = user.horizontalHeaderItem(item.column()).text() 
     print ('%s' % user.item(item.row(), 0).text()) 
     print ('is marked for %s' % delete) 
     print('%s Checked' % item.text()) 
     #self._list.append(item.row()) 
    else: 
     print('%s' % item.text()) 
     print (item.row(),item.column())