表格控件,还有一个QTableWidget,它继承自QTableView。QTableWidget和QTableView的主要区别是QTableView可以使用自定义的数据模型来显示内容,而QTableWidget只能使用标准的数据模型,并且其单元格数据是通过QTableWidgetItem对象来实现的。通常情况下,使用QTableWidget就能够满足我们的大多数要求。它常用的方法,除了用QTableView的方法外,还可用下表所示的方法:
方法 |
描述 |
setRowCount(int rows) |
设置表格控件的行数; |
setColumnCount(int column) |
设置表格控件的列数; |
setHorizontalHeaderLabels([str] labels) |
用于一次性顺序设置水平表头多个节显示的文本,该方法无返回值。设置了标签的节自动会创建该节对应的项; |
setVerticalHeaderLabels([str] labels) |
用于一次性顺序设置垂直表头多个节显示的文本,该方法无返回值。设置了标签的节自动会创建该节对应的项; |
setTextAlignment() |
设置单元格内文本的对齐方式; |
currentColumn() |
获取选中列的下标; |
currentRow() |
获取选中行的下标; |
currentItem() |
获取item之后,可用text()方法获取内容; |
selectedItems() |
获取List[QTableWidgetItem],可用循环获取每一列的内容值; |
item(int row, int column) |
用行和列的下标获取内容。 |
程序清单:tablewidget.py
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget,
QHBoxLayout, QTableWidget, QTableWidgetItem, QAbstractItemView
# 继承QWidget
class TableWidget(QWidget):
customer_list = [("张三", "男", "1981-06-02", "13888888888",
"南极路企鹅临舍傍9号999路"),
("李四", "男", "1988-08-08", "13999999999",
"北极熊店的下坡路中6号666路"),
("李清照", "女", "1986-06-06", "13666666666",
"秦岭古诗庙湾道8号888路")]
table_widget = None
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
# 设置布局
layout = QHBoxLayout()
# 数据层次结构,10行5列
self.table_widget = QTableWidget(10, 5)
# 最后一列自动拉伸
self.table_widget.horizontalHeader().setStretchLastSection(True)
# 输入内容
for (row, customer) in enumerate(self.customer_list):
for column in range(len(customer)):
self.table_widget.setItem(row, column,
QTableWidgetItem(customer[column]))
layout.addWidget(self.table_widget)
# 合并行列
self.table_widget.setSpan(0, 1, 2, 1)
# 单元格不可编辑
self.table_widget.setEditTriggers(QTableWidget.NoEditTriggers)
# 选择单行
self.table_widget.setSelectionBehavior(QAbstractItemView
.SelectRows)
# 单击事件
self.table_widget.cellClicked.connect(self.table_click)
# 双击事件
self.table_widget.cellDoubleClicked.connect(self.double_click)
self.setLayout(layout)
# 调整窗口大小
self.resize(900, 500)
# 窗口居中
self.center()
# 窗口标题
self.setWindowTitle("QTableWidget应用")
# 显示窗口
self.show()
# 获取文件夹路径
def table_click(self):
# 获取选中文本所在的列
item_list = self.table_widget.selectedItems()
for item in item_list:
print(item.text())
# 选中行
row = self.table_widget.currentRow()
# 选中列
column = self.table_widget.currentColumn()
data = self.table_widget.item(row, column).text()
print(data)
def double_click(self):
# 选中行
data = self.table_widget.currentItem()
print("选中单元格的数据:%s" % data.text())
# 实现居中
def center(self):
f = self.frameGeometry()
c = QDesktopWidget().availableGeometry().center()
f.moveCenter(c)
self.move(f.topLeft())
if __name__ == "__main__":
app = QApplication(sys.argv)
w = TableWidget()
sys.exit(app.exec_())
运行程序之后,弹出的窗口如下:
好了,QTableWidget的内容就说到这了,关注我,下一节更精彩。
今日头条:老陈说编程,到2021年国庆节,Python就全部分享完了,完整的课程有:
1.《12天搞定Python》
2.《16天搞定Python数据分析》
3.《10天搞定Python网络爬虫》
4. 《Django3.0项目实战》
5. 《25天学会Wxpython》
6. 《28天学会PyQt5》发布中
7. 《25天学会Seaborn数据分析》在csdn发布完了
8. 《3天搞定Pyecharts数据分析》国庆期间发布