PySide6 TableWidget 多选行同步取消勾选
要实现在 TableWidget 中多选并同步取消勾选的功能,可以使用 QTableWidget 的 'itemChanged' 信号和 'setCheckState' 方法。
首先,需要将 TableWidget 的选择模式设置为多选模式:
tableWidget.setSelectionMode(QAbstractItemView.MultiSelection)
然后,连接 TableWidget 的 'itemChanged' 信号到一个槽函数:
tableWidget.itemChanged.connect(self.onItemChanged)
在槽函数中,可以获取到发生改变的 Item 的行号和列号,然后使用 'setCheckState' 方法将改变应用到其他选中行的相同列:
def onItemChanged(self, item):
if item.checkState() == Qt.Checked:
# 获取选中行的行号
row = item.row()
# 获取选中行的列数
column = item.column()
# 遍历选中的行
for selectedItem in self.tableWidget.selectedItems():
# 如果不是当前行的相同列,则取消勾选
if selectedItem.row() != row and selectedItem.column() == column:
selectedItem.setCheckState(Qt.Unchecked)
完整的示例代码如下:
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QAbstractItemView
from PySide6.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.tableWidget = QTableWidget()
self.tableWidget.setColumnCount(2)
self.tableWidget.setRowCount(5)
self.tableWidget.setSelectionMode(QAbstractItemView.MultiSelection)
for row in range(5):
for column in range(2):
item = QTableWidgetItem(f'Item {row}-{column}')
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setCheckState(Qt.Unchecked)
self.tableWidget.setItem(row, column, item)
self.tableWidget.itemChanged.connect(self.onItemChanged)
self.setCentralWidget(self.tableWidget)
def onItemChanged(self, item):
if item.checkState() == Qt.Checked:
row = item.row()
column = item.column()
for selectedItem in self.tableWidget.selectedItems():
if selectedItem.row() != row and selectedItem.column() == column:
selectedItem.setCheckState(Qt.Unchecked)
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
原文地址: https://www.cveoy.top/t/topic/pkxS 著作权归作者所有。请勿转载和采集!