日韩性视频-久久久蜜桃-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:表格和树的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 波多野结衣日韩 | avxx| 妇女一级片 | 欧美一区二区网站 | 欧日韩视频 | 在线网站黄 | 日本午夜在线视频 | 动漫av网站 | 蜜臀在线一区二区三区 | 91精品福利在线 | 久久大胆人体 | 成人涩涩视频 | 风间由美一区二区 | 少妇脱了内裤让我添 | 精品无码一区二区三区蜜臀 | 在线看片国产 | 国产一二视频 | 国产三级精品三级在线观看 | 久久午夜精品 | 久久久久久久综合色一本 | 亚洲热在线 | 亚洲成人黄色网 | 亚洲午码 | 老熟女毛茸茸浓毛 | 伊人999 | 阿v免费在线观看 | 日韩性xx| 青青青视频免费观看 | 亚洲欧洲国产综合 | 久久国产精品久久久 | 日本免费黄色网 | 在线精品视频播放 | 国产精品电影网站 | 花房姑娘免费观看全集 | 九九影院最新理论片 | 五十路av| 91美女高潮出水 | 欧美成人乱码一二三四区免费 | 国产精品高潮呻吟久久久 | 日本www黄| 狠狠干中文字幕 | 91精品免费视频 | 成人毛片大全 | 亚洲精品国产精品国自产在线 | 国产精品大屁股白浆一区 | 人妻少妇被粗大爽9797pw | 亚洲福利视频网 | 在线亚洲不卡 | 中国少妇高潮 | 女女av在线 | 免费无码国产v片在线观看 三级全黄做爰在线观看 | 亚洲AV无码精品国产 | 色视频线观看在线播放 | 亚洲综合久久av一区二区三区 | 国产在线综合视频 | 日韩午夜视频在线观看 | 超碰国产一区二区三区 | 不卡视频在线播放 | 午夜一区在线观看 | 国产二三区 | 91视频在线免费看 | 亚洲大尺度视频 | 久久精品国产亚洲av嫖农村妇女 | 精品国产乱码久久久久久图片 | 欧美高清视频一区 | 骚婷婷 | 欧美精品1区2区 | 中文字幕 日本 | 少妇的被肉日常np | 国产精品久久久久影院老司 | 国产欧美一区在线观看 | 日韩在线观看不卡 | 中文在线国产 | 日日夜夜狠狠 | aaa国产视频| 成年人免费网站视频 | 91成人精品一区在线播放 | 国产乱子伦精品 | 久久综合狠狠综合久久综合88 | 特大黑人巨交吊性xx | 爱久久| 男女羞羞动态图 | 国产精品美女一区 | 日本中文字幕在线观看视频 | 国产亚洲久一区二区 | 911色| 五月婷激情 | 好男人www社区 | 国产成人精品999在线观看 | 精品在线第一页 | 三级a毛片 | 亚洲aa视频 | 性久久久久久久久久 | 夜夜小视频 | 国产日批| 日韩视频免费播放 | 欧美一级一级 | 91久久爱| 精品人妻av在线 |