【发布时间】:2021-11-09 14:15:37
【问题描述】:
如何迭代QTableWidget 中的一列并检查是否选中了复选框?
当我单击左侧的按钮时,我想迭代图片中的列并检查是否选中了复选框。
到目前为止,我已经尝试过这个函数,但是这个函数只返回None:
def checkBoxcheck(self):
print("checkBoxcheck started")
for row in range(self.rowCount()):
print(self.cellWidget(1, 1))
if not self.cellWidget(1, 1) is None:
if self.cellWidget(row, 1).isChecked():
#others to do
这是用于重现此问题的代码(我已经删除了代码中那些不必要的部分):
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTableWidget, \
QTableWidgetItem, QVBoxLayout, QHBoxLayout
from PyQt5.QtCore import Qt
from PyQt5 import QtCore, QtWidgets
import sys
class TableWidget(QTableWidget):
def __init__(self):
super().__init__(10, 3)
self.verticalHeader().setDefaultSectionSize(10)
self.horizontalHeader().setDefaultSectionSize(200)
for rows in range(self.rowCount()):
item = QtWidgets.QTableWidgetItem()
item.setCheckState(QtCore.Qt.Unchecked)
self.setItem(rows, 1, item)
def checkBoxcheck(self):
print("checkBoxcheck started")
for row in range(self.rowCount()):
print(self.cellWidget(1, 1))
if not self.cellWidget(1, 1) is None:
if self.cellWidget(row, 1).isChecked():
#others to do
pass
class AppDemo(QWidget):
def __init__(self):
super().__init__()
self.resize(700, 500)
mainLayout = QHBoxLayout()
table = TableWidget()
mainLayout.addWidget(table)
buttonLayout = QVBoxLayout()
button_new = QPushButton('Check if checked')
button_new.clicked.connect(table.checkBoxcheck)
buttonLayout.addWidget(button_new)
mainLayout.addLayout(buttonLayout)
self.setLayout(mainLayout)
def app():
app = QApplication(sys.argv)
demo = AppDemo()
demo.show()
sys.exit(app.exec_())
app()
希望你能帮我解决这个问题
【问题讨论】:
-
为了清楚起见,除了我的回答中的解释之外,在您的循环中,您总是检查
(1, 1)的项目,这显然是没有意义的。 -
好的,我刚刚注意到它是一个错字,您重复了再次,并且您已经发布了另一个问题。所以: 1. 使用for循环的变量时请多加注意; 2. 更仔细地遵循给你的建议; 3. 如果您只需要添加细节或代码,请不要创建新问题,使用edit链接并修改帖子!
标签: python pyqt pyqt5 qtablewidget