[英]PyQt5: State change in Checkboxes from a QTableWidget
我想知道是否有一种方法可以在您每次从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:
谢谢
没有直接获取它的信号,因此我将使用QTableWidget
的cellChanged
信号,还将一个先前的状态保存为一个角色,以便能够将其与当前状态进行比较。
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_())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.