本文共 5983 字,大约阅读时间需要 19 分钟。
QTableWidget是Qt程序中常用的显示数据表格的控件,类似于C#中的DataGrid。QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元格数据通过QTableWidgetItem来实现。
方法 | 描述 |
---|---|
setRowCount(int row) | 设置QTableWidget表格控件的行数 |
setColumnCount(int col) | 设置QTableWidget表格控件的列数 |
setHorizontalHeaderLabels() | 设置QTableWidget表格控件的水平标签 |
setVerticalHeaderLabels() | 设置QTableWidget表格控件的垂直标签 |
setItem(int,int,QTableWidgetItem) | 在QTableWidget表格控件的每个选项的单元空间里面添加控件 |
horizontalHeader() | 获得QTableWidget表格控件的表格头,以便执行隐藏 |
rowCount() | 获得QTableWidget表格控件的行数 |
columnCount() | 获得QTableWidget表格控件的列数 |
setEditTriggers(EditTriggers triggers) | 设置表格是否可编辑,设置编辑规则的枚举值 |
setSelectionBehavior() | 设置表格的选择行为 |
setTextAlignment() | 设置单元格内文字的对齐方式 |
setSpan(int row,int column,int rowSpanCount,int columnSpanCount) | 合并单元格。要改变单元格的第row行,第column列,要合并rowSpanCount行数和columnSpanCount列数 |
setShowGrid() | 在默认情况下表格的显示是有网格线的,True(显示网格线),False(不显示) |
setColumnWidth(int column,int width) | 设置单元行格的宽度 |
setRowHeight(int row,int height) | 设置单元列格的高度 |
编辑规则的枚举值类型
选项 | 值 | 描述 |
---|---|---|
QAbstractItemView.NoEditTriggers0No | 0 | 不能对表格内容进行修改 |
QAbstractItemView.CurrentChanged1Editing | 1 | 任何时候都能对单元格进行修改 |
QAbstractItemView.DoubleClicked2Editing | 2 | 双击单元格 |
QAbstractItemView.SelectedClicked4Editing | 4 | 单击已选中的内容 |
QAbstractItemView.EditKeyPressed8Editing | 8 | 当修改键被按下时修改单元格 |
QAbstractItemView.AnyKeyPressed16Editing | 16 | 按任意键修改单元格 |
QAbstractItemView.AllEditTriggers31Editing | 31 | 包括以上所有条件 |
表格的选择行为的枚举值类型
选项 | 值 | 描述 |
---|---|---|
QAbstractItemView.SelectItems0Selecting | 0 | 选中单个单元格 |
QAbstractItemView.SelectRows1Selecting | 1 | 选中一行 |
QAbstractItemView.SelectColumns2Selecting | 2 | 选中一列 |
单元格文本的水平对齐方式
选项 | 描述 |
---|---|
Qt.AlignLeft | 将单元格的内容沿单元格的左边缘对齐 |
Qt.AlignRight | 将单元格的内容沿单元格的右边缘对齐 |
Qt.AlignHCenter | 在可用空间中,居中显示在水平方向上 |
Qt.AlignJustify | 将文本在可用空间中对齐,默认是从左到右的 |
单元格文本的垂直对齐方式
选项 | 描述 |
---|---|
Qt.AlignTop | 与顶部对齐 |
Qt.AlignBottom | 与底部对齐 |
Qt.AlignVCenter | 在可用空间中,居中显示在垂直方向上 |
Qt.AlignBaseline | 与基线对齐 |
import sysfrom PyQt5 import QtCorefrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class Table(QWidget): def __init__(self): super().__init__() self.setGeometry(300, 300, 500, 400) self.setWindowTitle('QTableWidget的基本用法') layout = QHBoxLayout() table = QTableWidget() table.setRowCount(4) table.setColumnCount(3) layout.addWidget(table) table.setHorizontalHeaderLabels(['姓名','性别','体重(kg)']) item1 = QTableWidgetItem('张三') table.setItem(0,0,item1) item2 = QTableWidgetItem('男') table.setItem(0, 1, item2) item3 = QTableWidgetItem('50') table.setItem(0, 2, item3) self.setLayout(layout)if __name__ == "__main__": app = QApplication(sys.argv) form = Table() form.show() sys.exit(app.exec_())
运行效果如下:
#初始化table = QTableWidget()table.setRowCount(4)table.setColumnCount(3)#设置表格水平表头标签和垂直表头标签table.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])table.setVerticalHeaderLabels([1,2,3,4])
#可根据窗口大小来改变网格的大小table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
#只读不可修改table.setEditTriggers(QAbstractItemView.NoEditTriggers)
table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.resizeRowsToContents()table.resizeColumnsToContents()
#垂直方向table.verticalHeader().setVisible(False)#水平方向table.horizontalHeader().setVisible(False)
btn = QPushButton('修改')btn.setDown(True)#修改按钮大小btn.setStyleSheet("QPushButton{margin:3px};")#将按钮添加到单元格table.setCellWidget(1,0,btn)
#遍历表格查找对应的具体单元格,text为查找的项item = table.findItems(text,QtCore.Qt.MatchExactly)#获取行号row = item[0].row()#模拟鼠标滚轮快速定位到指定行table.verticalScrollBar().setSliderPosition(row)
item1 = QTableWidgetItem('张三')#设置文本颜色item1.setForeground(QBrush(QColor(255,0,0)))#设置字体加粗和大小item1.setFont(QFont("Times",12,QFont.Black))table.setItem(0,0,item1)
#QtCore.Qt.AscendingOrder升序#QtCore.Qt.DescendingOrder降序#对应的属性含义为:需要排序的列,排序方式table.sortItems(2,QtCore.Qt.DescendingOrder)
#设置单元格内容右对齐并与底部对齐item1.setTextAlignment(Qt.AlignRight|Qt.AlignBottom)
#设置第一行第一列的单元格占据3行1列table.setSpan(0,0,3,1)
#将第一列的单元格宽度设置为150table.setColumnWidth(0,150)#将第一列的高度设置为120table.setRowHeight(0,120)
item = QTableWidgetItem(QIcon('图片路径','图片名称'))
table.itemClicked.connect(self.click)def click(self,item): print('you selected =>'+item.text())
import sysfrom PyQt5 import QtCorefrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class Table(QWidget): def __init__(self): super().__init__() self.setGeometry(300, 300, 500, 400) self.setWindowTitle('QTableWidget的基本用法') layout = QHBoxLayout() self.table = QTableWidget() self.table.setRowCount(4) self.table.setColumnCount(3) layout.addWidget(self.table) self.table.setHorizontalHeaderLabels(['姓名','性别','体重(kg)']) item1 = QTableWidgetItem('张三') self.table.setItem(0,0,item1) item2 = QTableWidgetItem('男') self.table.setItem(0, 1, item2) item3 = QTableWidgetItem('50') self.table.setItem(0, 2, item3) item4 = QTableWidgetItem('王五') self.table.setItem(1, 0, item4) item5 = QTableWidgetItem('女') self.table.setItem(1, 1, item5) item6 = QTableWidgetItem('60') self.table.setItem(1, 2, item6) self.setLayout(layout) #允许右键产生菜单 self.table.setContextMenuPolicy(Qt.CustomContextMenu) #将右键菜单绑定槽函数 self.table.customContextMenuRequested.connect(self.Menu) def Menu(self,pos): row_num = -1 for i in self.table.selectionModel().selection().indexes(): row_num = i.row() # 表格中只有两行数据,所以只在前两行支持右键弹出菜单 if row_num < 2: menu = QMenu() item1 = menu.addAction(u'选项1') item2 = menu.addAction(u'选项2') item3 = menu.addAction(u'选项3') action = menu.exec_(self.table.mapToGlobal(pos))if __name__ == "__main__": app = QApplication(sys.argv) form = Table() form.show() sys.exit(app.exec_())
运行效果如下:
转载地址:http://dtozi.baihongyu.com/