赞
踩
一、表格与树
表格与树解决的问题是如何在一个控件中有规律地呈现更多的数据。解决该问题的两种控件类为表格结构的控件类,树形结构的控件类。
1、QTableView
若一个应用和一批数据(如数组、列表)进行交互后要以表格的形式输出这些信息的话,就用QTableView类。在QtableView中可以使用自定义的数据模型来显示内容,通过setModel来绑定数据源,可用的模式如下:
QStringListModel:存储一组字符串
QStandardItemModel:存储任意层次结构的数据
QDirModel:对文件系统进行封装
QSqlQueryModel:对SQL的查询结构集进行封装
QSqlTableModel:对SQL中的表格进行封装
QSqlRelationalTableModel:对带有foreign key的SQL表格进行封装
QSortFilterProxyModel:对模型中的数据进行排序或过滤
QTableView的使用例子:
# -*- coding: utf-8 -*- | |
''' | |
【简介】 | |
PyQT5中QTableView表格视图控件的例子 | |
''' | |
from PyQt5.QtWidgets import * | |
from PyQt5.QtGui import * | |
from PyQt5.QtCore import * | |
import sys | |
class 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
常用方法:setModel():用来设置View所关联的Model,可以使用Python原生的list作为数据源Model
selectedItem():选中Model中的条目
isSelected():判断Model中的某条条目是否被选中
常用信号:clicked:当单击某项时,信号被发射
doubleClicked:当双击某项时,信号被发射
使用QListView控件例子如下:
# -*- coding: utf-8 -*- | |
''' | |
【简介】 | |
PyQt5中 QListView 例子 | |
''' | |
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 = ['Item 1','Item 2','Item 3','Item 4' ] | |
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、QListWidget
它是一个基于条目的接口,用于从列表中添加或删除条目。列表中的每个条目都是一个QListWidgetItem对象。QListWidget可以设置为多重选择。
QListWidget类中的常用方法为:
addItem():在列表中添加QListWidgetItem对象或字符串
addItems():添加列表中的每个条目
insertItem():在指定的索引处插入条目
clear():删除列表的内容
setCurrentItem():设置当前所选条目
sortItems():按升序重新排列条目
常用信号为:currentItemChanged:当列表中的条目发生改变时发射此信号
itemClicked:当点击列表中的条目时发射此信号
QListWidget使用例子:
# -*- coding: utf-8 -*- | |
''' | |
【简介】 | |
PyQt5中 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("Item 1"); | |
listWidget.addItem("Item 2"); | |
listWidget.addItem("Item 3"); | |
listWidget.addItem("Item 4"); | |
listWidget.setWindowTitle('QListwidget 例子') | |
listWidget.itemClicked.connect(listWidget.clicked) | |
listWidget.show() | |
sys.exit(app.exec_()) |
运行结果:
4、QTableWidget
它是Qt程序中常用的显示数据表格的控件。
QTableWidget基本用法例子:
# -*- coding: utf-8 -*- | |
''' | |
【简介】 | |
PyQT5中单元格的基本例子 | |
''' | |
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("160") | |
tableWidget.setItem(0, 2, newItem) | |
# 将表格变为禁止编辑 | |
#tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) | |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。