06.PyQt5高级界面控------PyQt5编程开发

一、表格与树

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

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)
 
  • 13
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值