日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pyqt讲解7:表格和树

發布時間:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pyqt讲解7:表格和树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

表格和樹的作用就是在一個控件中有規律得呈現更多的數據,因此 PyQt5 提供了表格結構和樹形結構的控件類。

一.表格

1、QTableView

QTableView 用于將數據(數組、列表)以表格的形式呈現在界面中;QTableView 類中可以使用自定義數據模型來顯示內容,通過 setModel 綁定數據源。
QTableWidget 繼承自 QTableView,區別在于 QTableView 可以使用自定義數據模型來顯示內容,而 QTableWidget 只能使用標準的數據模型,并且單元格數據是人通過 QTableWidgetItem 對象來實現的。
QTable 控件可以綁定一個模型數據來更新控件上的內容,可用的模式如下表:

名稱 含義
QStringListModel :存儲一組字符串
QStandardItemModel :存儲任意層次結構的數據
QDirModel :對文件系統進行封裝
QSqlQueryModel ;對 SQL 的查詢結果集進行封裝
QSqlTableModel :對 SQL 中的表格進行封裝
QSqlRelationTableModel :對帶有 foreign key 的 SQL 表格進行封裝
QSortFilterProxyModel :對模型中的數據進行排序或過濾

rom 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_())

刪除當前選中的數據,有下面兩種方法:

indexs = self.tableView.selectionModel().selection().indexes() if len(indexs)>0: index = indexs[0] self.model.removeRows(index.row(), 1) index = self.tableView.currentIndex() self.model.removeRow(index.row())

2、QListView
QListView 類用于展示數據,子類是 QListWidget。 QListView 是基于模型的。
QListWidget 是 QListView 的升級版,此類已經建立了數據存儲模型(QListWidgetItem),直接調用 addItem() 函數添加條目。
QListView 常用方法如下表

方法描述
setModel()用來設置 View 所關聯的 Model,可以使用 Python 原生的 list 作為數據源 Model
selectedItem()選中 Model 中的條目
isSelected()判斷 Model 中的條目是否被選中

常用信號

信號描述
clicked當單擊某項時,觸發該信號
doubleClicked當雙擊某項時,觸發該信號
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();#字符listself.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
常用方法

方法描述
addItem()在列表中添加QListWidgetItem對象或字符串
addItems()添加列表中的每個條目
insertItem()在指定地索引處插入條目
clear()刪除列表的內容
setCurrentItem()設置當前所選的條目
sortItems()按升序重新排列條目

常用信號

方法描述
currentItemChanged當列表中的條目發生改變時發射此信號
itemClicked當點擊列表中的條目時發射此信號
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()c=['item5','item6']listWidget.resize(300,120) listWidget.addItem("Item 1");listWidget.addItem("Item 2");listWidget.addItem("Item 3");listWidget.addItem("Item 4");listWidget.addItems(c)listWidget.setWindowTitle('QListwidget 例子')listWidget.itemClicked.connect(listWidget.clicked)listWidget.show() sys.exit(app.exec_())

4、QTableWidget
常用方法

表格編輯類型的枚舉常量:

單元格內容對齊方式枚舉類型:

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)# 設置表格為整行選擇#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_()) import sys from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication , QTableWidgetItem, QHeaderView)class Table(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("QTableWidget demo")self.resize(500,300);conLayout = QHBoxLayout()tableWidget= QTableWidget()tableWidget.setRowCount(4)tableWidget.setColumnCount(3)conLayout.addWidget(tableWidget )tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)']) #tableWidget.setVerticalHeaderLabels(['行1','行2','行3','行4' ]) tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)newItem = QTableWidgetItem("張三") tableWidget.setItem(0, 0, newItem) newItem = QTableWidgetItem("男") tableWidget.setItem(0, 1, newItem) newItem = QTableWidgetItem("160") tableWidget.setItem(0, 2, newItem) self.setLayout(conLayout)if __name__ == '__main__':app = QApplication(sys.argv)example = Table() example.show() sys.exit(app.exec_()) # -*- coding: utf-8 -*- '''【簡介】PyQT5中 單元格里面放控件 '''import sys from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem, QAbstractItemView ,QComboBox, QPushButton )class Table(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("QTableWidget 例子")self.resize(430,300);conLayout = QHBoxLayout()tableWidget = QTableWidget()tableWidget.setRowCount(4)tableWidget.setColumnCount(3)conLayout.addWidget(tableWidget )tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)']) newItem = QTableWidgetItem("張三") tableWidget.setItem(0, 0, newItem) comBox = QComboBox()comBox.addItem("男")comBox.addItem("女")comBox.setStyleSheet("QComboBox{margin:3px};")tableWidget.setCellWidget(0,1,comBox)searchBtn = QPushButton("修改") searchBtn.setDown( True )searchBtn.setStyleSheet("QPushButton{margin:3px};")tableWidget.setCellWidget(0, 2, searchBtn) self.setLayout(conLayout)if __name__ == '__main__':app = QApplication(sys.argv)example = Table() example.show() sys.exit(app.exec_()) # -*- coding: utf-8 -*- '''【簡介】PyQT5的表格控件選中單元格'''import sys from PyQt5.QtWidgets import * from PyQt5 import QtCore from PyQt5.QtGui import QColor , QBrushclass Table(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("QTableWidget 例子")self.resize(600,800);conLayout = QHBoxLayout()tableWidget = QTableWidget()tableWidget.setRowCount(30)tableWidget.setColumnCount(4)conLayout.addWidget(tableWidget )for i in range(30):for j in range(4):itemContent = '(%d,%d)'% (i,j) tableWidget.setItem(i,j, QTableWidgetItem( itemContent ) )self.setLayout(conLayout)#遍歷表查找對應的itemtext = "(10,1)"items = tableWidget.findItems(text, QtCore.Qt.MatchExactly) item = items[0]# 選中單元格#item.setSelected( True)# 設置單元格的背景顏色為紅色item.setForeground(QBrush(QColor(255, 0, 0))) row = item.row() #滾輪定位過去,快速定位到第17行tableWidget.verticalScrollBar().setSliderPosition(row) if __name__ == '__main__':app = QApplication(sys.argv)example = Table() example.show() sys.exit(app.exec_())

二.樹QTreeWidget

QTreeWidget常用方法

方法描述
setColumnWidth(int column,int width)將指定列的寬度設置為給定的值
insertTopLevelItems()在視圖的頂層索引中引入項目的列表
expandAll()展開所有節點的樹形節點
invisibleRootItem()返回樹形控件中不可見的根選項(Root Item)
selectionItems()返回所有選定的非隱藏項目的列表內

QTreeWidgetItem類中常用的方法

方法描述
addChild()將子項追加到子列表中
setText()設置顯示的節點文本
Text()返回顯示的節點文本
setCheckState(column.state)設置指定列的選中狀態:
-Qt.Checked:節點選中
-Qt.Unchecked:節點沒有選中
setIcon(column,icon)在指定的列中顯示圖標
import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon, QBrush, QColor from PyQt5.QtCore import Qtclass TreeWidgetDemo(QMainWindow):def __init__(self, parent=None):super(TreeWidgetDemo, self).__init__(parent)self.setWindowTitle('TreeWidget 例子')self.tree = QTreeWidget()# 設置列數self.tree.setColumnCount(2)# 設置頭的標題self.tree.setHeaderLabels(['Key', 'Value'])# 設置根節點root = QTreeWidgetItem(self.tree)root.setText(0, 'root')root.setIcon(0, QIcon("./images/root.png"))# 設置列寬self.tree.setColumnWidth(0, 160)### 設置節點的背景顏色# brush_red = QBrush(Qt.red)# root.setBackground(0, brush_red)# brush_green = QBrush(Qt.green)# root.setBackground(1, brush_green)# 設置子節點1child1 = QTreeWidgetItem(root)child1.setText(0, 'child1')child1.setText(1, 'ios')child1.setIcon(0, QIcon("./images/IOS.png"))child1.setCheckState(0, Qt.Checked)# 設置子節點2child2 = QTreeWidgetItem(root)child2.setText(0, 'child2')child2.setText(1, '')child2.setIcon(0, QIcon("./images/android.png"))# 設置子節點3child3 = QTreeWidgetItem(child2)child3.setText(0, 'child3')child3.setText(1, 'android')child3.setIcon(0, QIcon("./images/music.png"))self.tree.addTopLevelItem(root)# 結點全部展開self.tree.expandAll()self.setCentralWidget(self.tree)if __name__ == '__main__':app = QApplication(sys.argv)tree = TreeWidgetDemo()tree.show()sys.exit(app.exec_())

節點綁定方法
child2 = QTreeWidgetItem(root)
括號里有root

優化一:設置節點的狀態
這里添加了child1的選中狀態

child1.setCheckState(0,Qt.Checked)

優化二:設置節點的背景顏色
這里設置了根節點的背景顏色

brush_red=QBrush(Qt.red)root.setBackground(0,brush_red)brush_blue=QBrush(Qt.blue)root.setBackground(1,brush_blue)

優化3 :添加響應事件

self.tree.clicked.connect( self.onTreeClicked ) def onTreeClicked(self, qmodelindex):item = self.tree.currentItem()print("key=%s ,value=%s" % (item.text(0), item.text(1)))


電氣專業的計算機萌新,寫博文不容易,如果你覺得本文對你有用,請點個贊支持下,謝謝。

總結

以上是生活随笔為你收集整理的pyqt讲解7:表格和树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。