前言:
此时兄弟们对“wxwidgetqtnet”大约比较看重,同学们都需要剖析一些“wxwidgetqtnet”的相关知识。那么小编在网摘上网罗了一些对于“wxwidgetqtnet””的相关资讯,希望姐妹们能喜欢,大家一起来学习一下吧!高级组件不是说这个组件有多”高级”的意思,而是表示功能强大的意思。如要实现一个功能完整的表格功能,可能需要花上好几天,编写好多代码才能实现,而直接调用wx.Grid组件,三两下就搞定了,所以说这个组件很高级。
PyQt5常用的高级组件有表格视图控件QTableView和QTableWidget、列表视图QList
View和QListWidget,树状结构QTreeWidget和标签视图QTabWidget。
表格视图控件QTableView需要和数据模型配套使用。表格的数据模型,需要填上每一行每一列的数据,就像execl表格一样。
QTableView是基于MVC模式设计的,M(Model)是数据模型,V(view)是指QTableView视图,用来显示数据模型,C(controllor)是控制器,与View合并到一起了。通过setModel()方法绑定数据源。它常用方法如下表所示:
方法
描述
setSpan(int, int, int, int)
合并行列,4个参数分别是起始行、起始列、合并行数和列表;
clearSpans()
清除所有合并的单元格(取消合并);
setSelectionBehavior()
值为QAbstractItemView.SelectRows时,将按行选中,而不是默认的可选中所有行;
setSelectionModel()
值为QAbstractItemView.SingleSelection时,将按单元格选中,而不是默认的可选中所有行;
setEditTriggers()
值为QTableView.NoEditTriggers时,将单元格置为不可编辑;
hideColumn(int column)
隐藏指定的列;
showColumn(int column)
显示指定的列;
hideRow(int row)
隐藏指定的行;
showRow(int row)
显示指定的行;
horizontalHeader()
返回水平表头对象,调用setSectionResizeMode(QHeaderView.Stretch)时,所有列平均分配;调用setStretchLastSection(True)时,最后一列自动拉伸。
isColumnHidden(int column)
返回bool值,表示列是否处于隐藏状态;
isRowHidden(int row)
返回bool值,表示行是否处于隐藏状态;
resizeColumnToContents(int column)
根据内容调整指定列的列宽,column为列的下标,从0开始;
resizeColumnsToContents()
根据内容调整所有列的列宽;
resizeRowToContents(int row)
根据内容调整指定行的行高,row为行的下标,从0开始;
resizeRowsToContents()
根据内容调整所有行的行高;
sortByColumn(int column,
SortOrder order)
对column进行排序,排序方式由order指定, Qt.DescendingOrder降序,Qt.AscendingOrder升序;
setModel(QAbstractItemModel)
绑定模型数据。
表格视图控件QTableView可以绑定的模型数据如下表所示:
模型名称
描述
QStringListModel
储存一组字符串;
QStandardItemModel
存储任意层次结构的数据;
QDirModel
对文件系统进行封装;
QSqlQueryModel
对SQL的查询结果集进行封装;
QSqlTableModel
对SQL中的表格进行封装;
QSqlRelationalTableModel
对带有foreign key的SQL表格进行封装。
模型的常用方法如下表所示:
方法
描述
setHorizontalHeaderLabels([str] labels)
用于一次性顺序设置水平表头多个节显示的文本,该方法无返回值。设置了标签的节自动会创建该节对应的项;
setVerticalHeaderLabels([str] labels)
用于一次性顺序设置垂直表头多个节显示的文本,该方法无返回值。设置了标签的节自动会创建该节对应的项;
setItem()
向模板里添加item;
appendRow()
添加QStandItem数据;
findItems(str,Qt.MatchExactly,
int column)
在指定列里查找数据,返回List;
removeRows(int row)
删除指定行的数据;
data(QModelIndex index)
获取单元格的值;
columnCount()
获取总列数;
程序清单:table.py
import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget, QHBoxLayout, QTableView, QAbstractItemViewfrom PyQt5.QtGui import QStandardItemModel, QStandardItem, QBrush, QColorfrom PyQt5.QtCore import Qt# 继承QWidgetclass TableViewWidget(QWidget): customer_list = [("张三", "男", "1981-06-02", "13888888888", "南极路企鹅临舍傍9号999路"), ("李四", "男", "1988-08-08", "13999999999", "北极熊店的下坡路中6号666路"), ("李清照", "女", "1986-06-06", "13666666666", "秦岭古诗庙湾道8号888路")] itemModel = None def __init__(self): super().__init__() self.init_ui() def init_ui(self): # 设置布局 layout = QHBoxLayout() table_view = QTableView(self) # 数据层次结构,10行5列 self.itemModel = QStandardItemModel(10, 5) # 表头 self.itemModel.setHorizontalHeaderLabels(["姓名", "性别", "生日", "手机号", "地址"]) # 输入内容 for (row, customer) in enumerate(self.customer_list): for column in range(len(customer)): self.itemModel.setItem(row, column, QStandardItem(customer[column])) # 绑定数据源 table_view.setModel(self.itemModel) # 最后一列自动拉伸 table_view.horizontalHeader().setStretchLastSection(True) items = self.itemModel.findItems("13666666666", Qt.MatchExactly, 3) # 设置单元格的背脊颜色为红 if len(items) > 0: items[0].setForeground(QBrush(QColor(255, 0, 0))) layout.addWidget(table_view) # 合并行列 table_view.setSpan(0, 1, 2, 1) # 单元格不可编辑 table_view.setEditTriggers(QTableView.NoEditTriggers) # 选择单行 table_view.setSelectionBehavior(QAbstractItemView.SelectRows) # 单击事件 table_view.clicked.connect(self.table_click) # 双击事件 table_view.doubleClicked.connect(self.double_click) self.setLayout(layout) # 调整窗口大小 self.resize(900, 500) # 窗口居中 self.center() # 窗口标题 self.setWindowTitle("表格应用") # 显示窗口 self.show() # 获取文件夹路径 def table_click(self, model_index): # 选中行和列的下标 row = model_index.row() column = model_index.column() item = self.itemModel.index(row, column).data() print("选中单元格的值:%s" % item) # 选中单元格的值 column_data = self.itemModel.data(model_index) print("选中单元格的值:%s" % column_data) # 总列数 column_count = self.itemModel.columnCount() for i in range(column_count): # 根据行列获取单元格里的值 item = self.itemModel.index(row, i).data() print(item, end=" ") def double_click(self, model_index): # 选中单元格的值 column_data = self.itemModel.data(model_index) print(column_data) # 实现居中 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 = TableViewWidget() sys.exit(app.exec_())
运行程序之后,弹出的窗口如下:
好了,QTableView的内容就说到这了,关注我,下一节更精彩。
码字不易,你的关注和转发是对我最大的鼓励,谢谢!
一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!
#python##程序员##好平台好讲师##桌面##热搜#
标签: #wxwidgetqtnet