qtableWidge中的行和列是从0开始的
***************
self.tableWidget.itemClicked.connect(self.outSelect)#单击获取单元格中的内容
def outSelect(self, Item=None):
if Item==None:
return
print(Item.text())
***************
self.tableWidget.setRowCount(row_num)#设置表格的行数
self.tableWidget.setColumnCount(col_num)#设置表格的列数
***************
self.tableWidget.columnCount()#获取当前表格共有多少列
self.tableWidget.rowCount()#获取当前表格共有多少行
***************
self.tableWidget.currentColumn()#获取当前选中的列
self.tableWidget.currentRow()#获取当前选中的行
***************
self.tableWidget.removeColumn(col)#删除指定列
self.tableWidget.removeRow(col)#删除指定行
***************
self.tableWidget.verticalHeader().setVisible(False)#隐藏列表头
self.tableWidget.horizontalHeader().setVisible(False)#隐藏行表头
***************
self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectColumns)#设置为选择整列
self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)#设置选择整行
***************
item_data = QTableWidgetItem(None)
self.tableWidget.setItem(row,col,item_data)#设置item信息
***************
self.tableWidget.item(d_row,d_col).text()#获取某行某列item中的x信息
***************
self.tableWidget.clearContents()#清空tablewidger中的内容,不包括表头
self.tableWidget.clear()#清楚所有包括表头
***************
col_num = self.tableWidget.columnCount()#获取当前的列数
row_num = self.tableWidget.rowCount()#获取当前的列数
self.tableWidget.setRowCount(row_num + 1)#添加一行
self.tableWidget.setColumnCount(col_num + 1)#添加一列
***************
if self.tableWidget.item(d_row,d_col) == None#判断指针是否为None(当新增加一行时,如果没有设置item信息,需要首先判断item是否为空)
***************
data_it =QTableWidgetItem()#()里面为表格中的元素
data_it.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)#设置为item不可被编辑
# 展示到图形界面 一个值设置一个 item_number
packet_number = packet_deal[0:13]
item_number = QTableWidgetItem(packet_number)
self.ui.tableWidget.setItem(index, 1, item_number) # 设置item信息
packet_number = packet_deal[8:11]
print(" 数据:", packet_number)
item_number = QTableWidgetItem(packet_number)
self.ui.tableWidget.setItem(index, 0, item_number)
禁止表格中的数据移动
self.table_widget.setDragEnabled(False) # 禁止拖动项
self.table_widget.setDragDropMode(QTableWidget.NoDragDrop) # 禁止整体拖放
设置行、列的间隔
去掉行或列索引
设置标题之间的间隔
复选框
# 用来装行表头所有复选框 全局变量
all_header_combobox = []
def setTableWidget(self):
# 清空复选框列表
all_header_combobox.clear()
for i in range(0, len(packet_count_list)):
# for packet_index, packet in enumerate(packets):
# count = packet_index + 1
print('packet_count_list', packet_count_list[i])
# count = len(packet_count_list)
count = i + 1
self.ui.tableWidget.setRowCount(count) # 添加行
self.process_packet(packet_count_list[i], i) # 处理完第一个数据包后,代码会自动继续到下一个数据包
time.sleep(0.0000001)
# 复选框
row_num = self.ui.tableWidget.rowCount() # 获取当前表格共有多少行
col_num = self.ui.tableWidget.columnCount() # 获取当前表格共有多少列
for row in range(0, row_num):
for col in range(8, col_num):
checkbox = QCheckBox()
all_header_combobox.append(checkbox) # 将所有的复选框都添加到 全局变量 all_header_combobox 中
self.ui.tableWidget.setCellWidget(row, col, checkbox) # 为指定行和列添加复选框
checkbox.stateChanged.connect(self.Select) # 连接复选框的点击事件
def Select(self):
if all_header_combobox:
for checkbox in all_header_combobox:
if checkbox.isChecked():
# 获取当前点击的单元格所在的行号和列号
index = self.ui.tableWidget.indexAt(checkbox.pos())
row = index.row()
col = index.column()
print("点击:")
print(row)
print(col)
else:
print("复选框对象未初始化")
点击表头即可正反排序
当用户点击某一列时,会根据当前的排序方向改变排序方向,并进行排序。这里的关键在于正确处理排序方向的切换。我们可以使用一个布尔变量来跟踪当前的排序方向,以便在用户再次点击同一列时切换方向。
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from PySide6.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.sort_direction = Qt.AscendingOrder # 初始化排序方向为正序
self.setWindowTitle("QTableWidget 单列排序示例")
self.setGeometry(100, 100, 600, 400)
self.table = QTableWidget()
self.table.setColumnCount(3)
self.table.setHorizontalHeaderLabels(["姓名", "年龄", "城市"])
data = [
["一", 28, "北京"],
["二", 22, "上海"],
["三", 35, "广州"],
["四", 24, "深圳"],
["五", 32, "杭州"]
]
self.table.setRowCount(len(data))
for row_index, row_data in enumerate(data):
for col_index, item in enumerate(row_data):
self.table.setItem(row_index, col_index, QTableWidgetItem(str(item)))
self.table.horizontalHeader().sectionClicked.connect(self.sort_table)
layout = QVBoxLayout()
layout.addWidget(self.table)
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
def sort_table(self, column):
if self.table.horizontalHeader().sortIndicatorSection() == column:
if self.sort_direction == Qt.AscendingOrder:
self.sort_direction = Qt.DescendingOrder
else:
self.sort_direction = Qt.AscendingOrder
else:
self.sort_direction = Qt.AscendingOrder # 如果点击了不同的列,则重置排序方向为正序
self.table.horizontalHeader().setSortIndicator(column, self.sort_direction)
self.table.sortItems(column, self.sort_direction)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show(