我应该如何将特定行链接到 Qtablewidget 中的列

Posted

技术标签:

【中文标题】我应该如何将特定行链接到 Qtablewidget 中的列【英文标题】:How should I link specific rows to columns in a Qtablewidget 【发布时间】:2016-12-20 06:51:17 【问题描述】:

我有一个包含 3 列的 Qtablewidget。第一列包含用户名,第二和第三列是复选框。我希望这些复选框成为用户行的属性。例如,如果你看下面的图片,用户:布鲁诺被标记(有属性)删除和删除主页。我想要一个像这样的输出:User Bruno marked for delete, marked for delete home。为此,我需要将用户链接到我完全不知道的这两个列。我应该如何处理这个问题。下面是我已经想出的代码。它从文件中填充用户列。

从 PyQt4 导入 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_())

【问题讨论】:

另外,如果有人知道如何在单元格中居中复选框,那就太好了。谢谢。 【参考方案1】:

这样修复它:

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

【讨论】:

以上是关于我应该如何将特定行链接到 Qtablewidget 中的列的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在 QTableWidget 的一列中添加一行?

QTableWidget 并生成英文数字作为数字行

使用 Python pyqt4 获取 QTableWidget 中特定行和列的单元格突出显示

在 QTableWidget 中区分交替行颜色和选择颜色

如何通过样式表自定义 QTableWidget?

如何将带有数据的标题添加到 Qt 中的 QTableWidget?