目录

1、QTableView类

2、QListView类

3、QListWidet类

4、QTableWidget类

5、QTreeWidget和QTreeWidgetltem类


表格与树解决的问题是如何在一个控件中有规律地呈现更多的数据。PyQt提供了两种控件类用于解决该问题,其中一种是表格结构的控件类,另一种是树形结构的控件类。

1、QTableView类

在通常情况下,一个应用需要和一批数据(比如数组、列表)进行交互,然后以表格的形式输出这些信息,这时就要用到QTableView类了。在QtableView中可以使用自定义的数据模型来显示内容,通过setModel来绑定数据源。

QTableWidget继承自QTableView,主要区别是QTableView可以使用自定义的数据模型来显示内容(先要通过setModel来绑定数据源),而QTableWidget只能使用标准的数据模型,并且其单元格数据是通过QTableWidgetltem对象来实现的。通常使用QTableWidget就能够满足我们的要求。

QTableView控件可以绑定一个模型数据用来更新控件上的内容,可用的模式如下表所示:

通过示例了解QTableView类的使用方法,效果如下所示:

实现代码如下所示:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sysclass Table(QWidget):def __init__(self, arg=None):super(Table, self).__init__(arg)self.setWindowTitle("QTableView表格视图控件的例子")       self.resize(500,300);self.model=QStandardItemModel(4,4);self.model.setHorizontalHeaderLabels(['标题1','标题2','标题3','标题4'])for row in range(4):for column in range(4):item = QStandardItem("row %s, column %s"%(row,column))self.model.setItem(row, column, item)self.tableView=QTableView()self.tableView.setModel(self.model)#下面代码让表格100填满窗口#self.tableView.horizontalHeader().setStretchLastSection(True)#self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)dlgLayout=QVBoxLayout();dlgLayout.addWidget(self.tableView)self.setLayout(dlgLayout)if __name__ == '__main__':app = QApplication(sys.argv)   table = Table()table.show()sys.exit(app.exec_())

2、QListView类

QListView类用于展示数据,它的子类是QListWidget类。QListView是基于模型(Model)的,需要程序来建立模型,然后再保存数据。

QListWidget是一个升级版本的QListView,它已经建立了一个数据存储模(QListWidgetltem),直接调用addltem()函数,就可以添加条目(ltem)。

QListView类中的常用方法如下表所示:

QListView类中的常用信号如下表所示:

通过示例了解QListView类的使用方法,效果如下所示:

示例中,将QListView控件的clicked信号与自定义对象的clicked()槽函数进行绑定,当单击QListView控件里Model中的一项时会弹出消息框(提示选择的是哪─项)。

实现代码如下所示:

from PyQt5.QtWidgets import QApplication, QWidget , QVBoxLayout , QListView, QMessageBox
from PyQt5.QtCore import QStringListModel
import sys  class ListViewDemo(QWidget):def __init__(self, parent=None):super(ListViewDemo, self).__init__(parent)self.setWindowTitle("QListView 例子")self.resize(300, 270)    layout = QVBoxLayout()listView = QListView()      slm = QStringListModel();self.qList = ['Pyhon语言','C语言','C++语言','Java语言' ]  slm.setStringList(self.qList)listView.setModel(slm )listView.clicked.connect(self.clicked)      layout.addWidget( listView )self.setLayout(layout)       def clicked(self, qModelIndex):QMessageBox.information(self, "QListView", "你选择了: "+ self.qList[qModelIndex.row()])if __name__ == "__main__":       app = QApplication(sys.argv)win = ListViewDemo() win.show()  sys.exit(app.exec_())

3、QListWidet类

QListWidet类是一个基于条目的接口,用于从列表中添加或删除条目。列表中的每个条目都是一个QListWidgetltem对象。QListWidget可以设置为多重选择。

QListWidget类中的常用方法如下表所示:

QListWidget类中的常用信号如下表所示:

通过示例了解QListWidget类的使用方法,效果如下所示:

示例中, 将QListWidget控件的itemClicked信号与自定义对象的Clicked()槽函数进行绑定,当单击QListWidget列表中的一个条目时会弹出消息框,提示选择的是哪个条目。

实现代码如下所示:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *class ListWidget(QListWidget):def clicked(self,item):QMessageBox.information(self, "ListWidget", "你选择了: "+item.text())if __name__ == '__main__':app = QApplication(sys.argv)listWidget  = ListWidget()listWidget.resize(300,120) listWidget.addItem("Pyhon语言");listWidget.addItem("C语言");listWidget.addItem("C++语言");listWidget.addItem("Java语言");listWidget.setWindowTitle('QListwidget 例子')listWidget.itemClicked.connect(listWidget.clicked)listWidget.show() sys.exit(app.exec_())

4、QTableWidget类

QTableWidget是Qt程序中常用的显示数据表格的空间,类似于C#中的DataGrid。QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元格数据是通过QTableWidgetltem 对象来实现的。使用QTableWidget时就需要QTableWidgetltem,用来表示表格中的一个单元格,整个表格就是用各单元格构建起来的。

QTableWidget类中的常用方法如下表所示:

编辑规则的枚举值类型如下表所示:

表格的选择行为的枚举值类型如下表所示:

单元格文本的水平对齐方式如下表所示:

单元格文本的垂直对齐方式如下表所示:

如果要设置水平和垂直对齐方式,比如在表格空间内上、下、左、右居中对齐,那么只要使用Qt.AlignHCenter和Qt.AlignVCenter 即可。

通过示例了解QTableWidget类的使用方法,效果如下所示:

示例中, 构造了一个QTableWidget对象,并且设置表格为4行3列。生成了一个QTableWidgetltem对象,名称为“不脱发的程序猿”。

实现代码如下所示:

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem, QAbstractItemView  )class Table(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("QTableWidget 例子")self.resize(430,230);conLayout = QHBoxLayout()tableWidget = QTableWidget()tableWidget.setRowCount(4)tableWidget.setColumnCount(3)conLayout.addWidget(tableWidget )tableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])  newItem = QTableWidgetItem("不脱发的程序猿")  tableWidget.setItem(0, 0, newItem)  newItem = QTableWidgetItem("男")  tableWidget.setItem(0, 1, newItem)  newItem = QTableWidgetItem("65")  tableWidget.setItem(0, 2, newItem)   # 将表格变为禁止编辑#tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)# 设置表格为整行选择#tableWidget.setSelectionBehavior( QAbstractItemView.SelectRows)# 将行和列的大小设为与内容相匹配#tableWidget.resizeColumnsToContents()#tableWidget.resizeRowsToContents()#表格表头的显示与隐藏#tableWidget.verticalHeader().setVisible(False)#tableWidget.horizontalHeader().setVisible(False)# 不显示表格单元格的分割线#tableWidget.setShowGrid(False)# 不显示垂直表头tableWidget.verticalHeader().setVisible(False)self.setLayout(conLayout)if __name__ == '__main__':app = QApplication(sys.argv)example = Table()  example.show()   sys.exit(app.exec_())

5、QTreeWidget和QTreeWidgetltem类

QTreeWidget类实现了树形结构,效果如下图所示:

QTreeWidget类中的常用方法如下表所示:

QTreeWidgetltem类中的常用方法如下表所示:

通过示例了解QTreeWidget和QTreeWidgetltem类的使用方法,效果如下所示:

示例中,实现树形结构节点的添加、修改和删除, 实现代码如下所示:

import sys
from PyQt5.QtWidgets import *
#from PyQt5.QtGui import QIcon ,  QBrush , QColor
#from PyQt5.QtCore import Qt class TreeWidgetDemo(QWidget):   def __init__(self,parent=None):super(TreeWidgetDemo,self).__init__(parent)self.setWindowTitle('TreeWidget 例子')operatorLayout = QHBoxLayout()addBtn = QPushButton("添加节点")updateBtn =  QPushButton("修改节点")delBtn = QPushButton("删除节点")     operatorLayout.addWidget(addBtn)operatorLayout.addWidget(updateBtn)operatorLayout.addWidget(delBtn)# 按钮的信号槽连接addBtn.clicked.connect(self.addTreeNodeBtn )updateBtn.clicked.connect(self.updateTreeNodeBtn )delBtn.clicked.connect(self.delTreeNodeBtn )     self.tree = QTreeWidget(self)# 设置列数self.tree.setColumnCount(2)# 设置头的标题self.tree.setHeaderLabels(['Key','Value'])root= QTreeWidgetItem(self.tree)root.setText(0,'root')root.setText(1,'0')child1 = QTreeWidgetItem(root)child1.setText(0,'child1')child1.setText(1,'1')child2 = QTreeWidgetItem(root)child2.setText(0,'child2')child2.setText(1,'2')child3 = QTreeWidgetItem(root)child3.setText(0,'child3')child3.setText(1,'3')       child4 = QTreeWidgetItem(child3)child4.setText(0,'child4')child4.setText(1,'4')child5 = QTreeWidgetItem(child3)child5.setText(0,'child5')child5.setText(1,'5')self.tree.addTopLevelItem(root)self.tree.clicked.connect( self.onTreeClicked )mainLayout = QVBoxLayout(self);mainLayout.addLayout(operatorLayout);mainLayout.addWidget(self.tree);     self.setLayout(mainLayout)      def onTreeClicked(self, qmodelindex):item = self.tree.currentItem()print("key=%s ,value=%s" % (item.text(0), item.text(1)))def addTreeNodeBtn(self):print('--- addTreeNodeBtn ---')item = self.tree.currentItem()node = QTreeWidgetItem(item)node.setText(0,'newNode')node.setText(1,'10') def updateTreeNodeBtn(self):print('--- updateTreeNodeBtn ---')item = self.tree.currentItem()item.setText(0,'updateNode')item.setText(1,'20')     def delTreeNodeBtn(self):print('--- delTreeNodeBtn ---')item = self.tree.currentItem()root = self.tree.invisibleRootItem()for item in self.tree.selectedItems():(item.parent() or root).removeChild(item)if __name__ == '__main__':app = QApplication(sys.argv)tree = TreeWidgetDemo()tree.show()sys.exit(app.exec_())

Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)相关推荐

  1. Python Qt GUI设计:QPainter、QPen、QBrush和QPixmap窗口绘图类(基础篇—17)

    目录 1.QPainter绘图类 2.QPen绘图类 3.QBrush绘图类 4.QPixmap绘图类 本篇博文主要介绍如何实现在窗口中绘图,在 PyQt5中,一般可以通过QPainter.QPen. ...

  2. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

  3. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  4. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  5. Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12)

    目录 1.QPushButton按钮类 2.QRadioButton按钮类 3.QCheckBox按钮类 在GUI设计中,按钮都是最重要的和常用的触发动作请求的方式,用来与用户进行交互操作.在PyQt ...

  6. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

    目录 1.创建项目 2.将.ui文件生成.py文件 2.1.Eric 6编译 2.2.Python命令行编译 2.3.脚本编译 3.界面.逻辑分离思想 在开始本文之前提醒各位朋友,Python记得安装 ...

  7. Python Qt GUI设计:UI界面可视化组件、属性概述(基础篇—4)

    目录 1.界面组件 1.1.布局组件(Layouts) 1.2.分隔组件(Spacers) 1.3.按钮组件(Buttons) 1.4.表项视图(Item Views) 1.5.表项组件(Item W ...

  8. Python Qt GUI设计:QMainWindow、QWidget和QDialog窗口类(基础篇—10)

    目录 1. QMainWindow窗口 2.QWidget窗口 3.QDialog窗口 3.1.QMessageBox窗口 3.2.QInputDialog窗口 3.3.QFontDialog窗口 3 ...

  9. Python Qt GUI设计:多线程中信号与槽的使用(基础篇—9)

    有时候在项目开发时,经常会遇到一些耗时操作导致界面迟缓卡顿,为了解决这个问题,可以创建多线程,使用主线程更新界面使用子线程实时处理数据,最后将结果显示到界面上. PyQt多线程将使用QThread函数 ...

最新文章

  1. 《 百度大脑AI技术成果白皮书》,介绍百度大脑5.0,附48页PDF下载
  2. 原创,真正解决iframe高度自适应的问题.兼容各浏览器
  3. Git 分布式版本控制系统
  4. STM32 基础系列教程 20 - RTC
  5. oracle书写高质量sql,干货!SQL性能优化,书写高质量SQL语句
  6. 每天一道LeetCode-----计算二叉树的最大路径和,路径只需要从一个节点到达另一个节点,无其他要求
  7. cv::mat 颜色空间_网站设计基础:负空间
  8. 栈和递归的关系 144:Binary Tree Preorder Traversal
  9. CVE-2019-0708漏洞补丁KB4499175
  10. 总有被遗忘或者没有及时跟进的工作
  11. python爬虫淘宝评论图片_淘宝上的图片是怎么被爬取的
  12. matlab怎么产生调频信号,MATLAB关于产生线性调频信号的问题
  13. 劳务派遣计算机信息管理系统,劳务派遣人员信息管理系统
  14. win10显示rpc服务器不可用,多种方法解决Win10专业版RPC服务器不可用的方法
  15. 【速记】英语多个形容词(定语)搭配规则
  16. 服务器只识别2t硬盘,网吧用2008R2服务器系统不认2T以上单个硬盘?
  17. 银行不良资产收益权转让 模式大起底
  18. MySQL灵魂五十问
  19. MATLAB实现分支定界法求解整数规划
  20. return 和return:redirect:/**

热门文章

  1. Cache Aside Pattern(缓存模式)
  2. Js touchg事件在移动端网页中左右滑动效果
  3. 二叉树的遍历(递归与非递归)
  4. javascript 执行环境细节分析、原理-12
  5. [代码]--WinForm 窗体之间相互嵌套
  6. 为什么不记录慢速查询?
  7. HDU1548:A strange lift(Dijkstra或BFS)
  8. RedHat、CentOS设置静态IP、主机名、关闭防火墙(虚拟机VMware客户机)
  9. html中锚点的应用【本页面跳转】
  10. 使用 雨林木风 Ghost XP SP3 装机版 YN9.9 安装 Win7 (SP1)