2016-12-20 4 views
0

3 열이 포함 된 Qtablewidget이 있습니다. 첫 번째 열은 사용자 이름을 포함하고 두 번째 및 세 번째 열은 확인란입니다. 이 체크 박스를 사용자 행의 속성으로 사용하겠습니다. 예를 들어 아래 이미지를 보면 User : bruno가 표시 (속성 있음)되어 집을 삭제하고 삭제합니다. 나는 같은 출력을 가지고 싶습니다 : User Bruno marked for delete, marked for delete home. 그렇게하기 위해서, 나는이 두 칼럼에 사용자를 연결시켜야한다. 이 문제에 어떻게 접근해야합니까? 아래는 이미 생각해 낸 코드입니다. 파일에서 사용자 열을 채 웁니다. PyQt4 수입 QtGui에서 특정 행을 Qtablewidget의 열과 연결하는 방법

table

, 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

사람이 좋은 것 세포 내에서 체크 박스를 중심으로하는 방법을 알고도합니다. 감사. – answerSeeker

답변

0

이처럼 고정 :

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()) 
관련 문제