python - PyQt5:QTableWidget 中复选框的状态更改

标签 python pyqt pyqt5 qtablewidget qtablewidgetitem

我想知道是否有一种方法可以在您选中/取消选中 QTableWidget 中的单元格中的复选框时运行函数。现在我通过以下方式创建这些复选框:

for row in range(len(my_list)):
    self.item = QtWidgets.QTableWidgetItem()
    self.item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
    self.item.setCheckState(QtCore.Qt.Checked)

有某种 item.stateChanged.connect() 方法吗? 我什至尝试,对于表中的每次单击,检查单击的行中项目的状态,但每次都会返回 2,就好像它始终被检查一样:

if self.mytable.item(row,1).checkState() == QtCore.Qt.Checked:

谢谢

最佳答案

没有信号可以直接获取它,所以我将使用QTableWidgetcellChanged信号,我还将保存角色中的先前状态以便能够将其与当前状态进行比较。

from PyQt5 import QtCore, QtWidgets

LastStateRole = QtCore.Qt.UserRole

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.tablewidget = QtWidgets.QTableWidget(4, 4)
        self.setCentralWidget(self.tablewidget)

        my_list = ["A", "B", "C", "D"]
        for row in range(len(my_list)):
            item = QtWidgets.QTableWidgetItem()
            item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
            item.setCheckState(QtCore.Qt.Checked)
            item.setData(LastStateRole, item.checkState())

            self.tablewidget.setItem(row, 0, item)

        self.tablewidget.cellChanged.connect(self.onCellChanged)

    def onCellChanged(self, row, column):
        item = self.tablewidget.item(row, column)
        lastState = item.data(LastStateRole)
        currentState = item.checkState()
        if currentState != lastState:
            print("changed: ")
            if currentState == QtCore.Qt.Checked:
                print("checked")
            else:
                print("unchecked")
            item.setData(LastStateRole, currentState)


if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

关于python - PyQt5:QTableWidget 中复选框的状态更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51846715/

相关文章:

python - QFileDialog opens in new window while adding it to QHBoxLayout

python - 在 Python 中反向执行一个函数

python - 初级 Python 类(class) - 使用用户输入更改属性值

qt - python qt : automatically resizing main window to fit content

python - QHBoxLayout 以不同的顺序添加小部件

python - 如何在 PyQt5 中对 QProcesses 进行排队?

python-3.x - PyInstaller; "could not find or load the Qt platform plugin "Windows”

python - 将两列与相关数据合并为一列(python、pandas)

python - 在 python 中从头开始实现马氏距离

python - QListWidget显示更多项目