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

目录

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类的使用方法,效果如下所示:

实现代码如下所示:

  1. from PyQt5.QtWidgets import *

  2. from PyQt5.QtGui import *

  3. from PyQt5.QtCore import *

  4. import sys

  5. class Table(QWidget):

  6. def __init__(self, arg=None):

  7. super(Table, self).__init__(arg)

  8. self.setWindowTitle("QTableView表格视图控件的例子")

  9. self.resize(500,300);

  10. self.model=QStandardItemModel(4,4);

  11. self.model.setHorizontalHeaderLabels(['标题1','标题2','标题3','标题4'])

  12. for row in range(4):

  13. for column in range(4):

  14. item = QStandardItem("row %s, column %s"%(row,column))

  15. self.model.setItem(row, column, item)

  16. self.tableView=QTableView()

  17. self.tableView.setModel(self.model)

  18. #下面代码让表格100填满窗口

  19. #self.tableView.horizontalHeader().setStretchLastSection(True)

  20. #self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.

  21. Stretch)

  22. dlgLayout=QVBoxLayout();

  23. dlgLayout.addWidget(self.tableView)

  24. self.setLayout(dlgLayout)

  25. if __name__ == '__main__':

  26. app = QApplication(sys.argv)

  27. table = Table()

  28. table.show()

  29. sys.exit(app.exec_())

2、QListView类

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

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

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

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

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

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

实现代码如下所示: 

  1. from PyQt5.QtWidgets import QApplication, QWidget , QVBoxLayout , QListView,

  2. QMessageBox

  3. from PyQt5.QtCore import QStringListModel

  4. import sys

  5. class ListViewDemo(QWidget):

  6. def __init__(self, parent=None):

  7. super(ListViewDemo, self).__init__(parent)

  8. self.setWindowTitle("QListView 例子")

  9. self.resize(300, 270)

  10. layout = QVBoxLayout()

  11. listView = QListView()

  12. slm = QStringListModel();

  13. self.qList = ['Pyhon语言','C语言','C++语言','Java语言' ]

  14. slm.setStringList(self.qList)

  15. listView.setModel(slm )

  16. listView.clicked.connect(self.clicked)

  17. layout.addWidget( listView )

  18. self.setLayout(layout)

  19. def clicked(self, qModelIndex):

  20. QMessageBox.information(self, "QListView", "你选择了: "+

  21. self.qList[qModelIndex.row()])

  22. if __name__ == "__main__":

  23. app = QApplication(sys.argv)

  24. win = ListViewDemo()

  25. win.show()

  26. sys.exit(app.exec_())

3、QListWidet类

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

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

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

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

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

实现代码如下所示:

  1. import sys

  2. from PyQt5.QtCore import *

  3. from PyQt5.QtGui import *

  4. from PyQt5.QtWidgets import *

  5. class ListWidget(QListWidget):

  6. def clicked(self,item):

  7. QMessageBox.information(self, "ListWidget", "你选择了: "+item.text())

  8. if __name__ == '__main__':

  9. app = QApplication(sys.argv)

  10. listWidget = ListWidget()

  11. listWidget.resize(300,120)

  12. listWidget.addItem("Pyhon语言");

  13. listWidget.addItem("C语言");

  14. listWidget.addItem("C++语言");

  15. listWidget.addItem("Java语言");

  16. listWidget.setWindowTitle('QListwidget 例子')

  17. listWidget.itemClicked.connect(listWidget.clicked)

  18. listWidget.show()

  19. 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对象,名称为“不脱发的程序猿”。

实现代码如下所示: 

  1. import sys

  2. from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication,

  3. QTableWidgetItem, QAbstractItemView )

  4. class Table(QWidget):

  5. def __init__(self):

  6. super().__init__()

  7. self.initUI()

  8. def initUI(self):

  9. self.setWindowTitle("QTableWidget 例子")

  10. self.resize(430,230);

  11. conLayout = QHBoxLayout()

  12. tableWidget = QTableWidget()

  13. tableWidget.setRowCount(4)

  14. tableWidget.setColumnCount(3)

  15. conLayout.addWidget(tableWidget )

  16. tableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])

  17. newItem = QTableWidgetItem("不脱发的程序猿")

  18. tableWidget.setItem(0, 0, newItem)

  19. newItem = QTableWidgetItem("男")

  20. tableWidget.setItem(0, 1, newItem)

  21. newItem = QTableWidgetItem("65")

  22. tableWidget.setItem(0, 2, newItem)

  23. # 将表格变为禁止编辑

  24. #tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

  25. # 设置表格为整行选择

  26. #tableWidget.setSelectionBehavior( QAbstractItemView.SelectRows)

  27. # 将行和列的大小设为与内容相匹配

  28. #tableWidget.resizeColumnsToContents()

  29. #tableWidget.resizeRowsToContents()

  30. #表格表头的显示与隐藏

  31. #tableWidget.verticalHeader().setVisible(False)

  32. #tableWidget.horizontalHeader().setVisible(False)

  33. # 不显示表格单元格的分割线

  34. #tableWidget.setShowGrid(False)

  35. # 不显示垂直表头

  36. tableWidget.verticalHeader().setVisible(False)

  37. self.setLayout(conLayout)

  38. if __name__ == '__main__':

  39. app = QApplication(sys.argv)

  40. example = Table()

  41. example.show()

  42. sys.exit(app.exec_())

5、QTreeWidget和QTreeWidgetltem类

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


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

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

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



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

。。。。。。。。。。。。。。。。。

版权原因,完整文章,请参考如下:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值