2016-12-20 3 views
0

Ich habe eine Qtablewidget mit 3 Spalten. Die erste Spalte enthält Benutzernamen, die zweite und dritte Spalte sind Kontrollkästchen. Ich möchte, dass diese Kontrollkästchen Attribute für die Benutzerzeile sind. Zum Beispiel, wenn Sie auf das Bild unten schauen, Benutzer: Bruno ist markiert (hat Attribute) löschen und löschen nach Hause. Ich hätte gerne eine Ausgabe wie: User Bruno marked for delete, marked for delete home. Um dies zu tun, müsste ich die Benutzer mit diesen beiden Spalten verknüpfen, von denen ich nicht die geringste Ahnung habe. Wie soll ich dieses Problem angehen? Unten ist der Code, den ich bereits gefunden habe. Er füllt die Benutzerspalte aus einer Datei.Wie verknüpfe ich bestimmte Zeilen mit Spalten in einem Qtablewidget

table von PyQt4 Import QtGui, 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

Auch wenn jemand weiß, wie Checkboxen innerhalb der Zellen zu zentrieren, das wäre toll. Vielen Dank. – answerSeeker

Antwort

0

es wie folgt festgelegt:

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()) 
Verwandte Themen