pyqtqtableview添加下拉框控件_PyQt5学习笔记(⼗)表格控
件与树控件
显⽰⼆维数据(QTableView)
需要创建QTableView实例和⼀个数据源Model,然后将两者关联。其运⾏机制类似于MVC模式。
MVC模式:Model(数据) Viewer(UI) Controller
MVC的⽬的是将后端的数据和前端的耦合度降低。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class TableView(QWidget):
def __init__(self):
super(TableView, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableView表格试图控件演⽰")
# 设置表格,可填充数据为4*3
self.tableview = QTableView()
# 关联QTableView控件和Model
self.tableview.del)
# 添加数据
item11 = QStandardItem('10')
item12 = QStandardItem('AA')
item13 = QStandardItem('20')
layout = QVBoxLayout()
layout.addWidget(self.tableview)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = TableView()
main.show()
<_())
运⾏效果:
QStandardItemModel(4, 3)相当于创建了⼀个4*3的表格(不包括说明的⽂字)。然后对表格(model对象)的数据填充(每⼀个格⼦的数据是QStandItem对象)都是model这个步骤中的;最后通过QTableView创建view,通过setModel()将model和view关联起来,最后加⼊主窗⼝的控件时view。这样,我们创建的表格和主窗⼝的关系只是松耦合。
显⽰列表数据(QListView)
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class ListViewDemo(QWidget):
def __init__(self):
super(ListViewDemo, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QListView演⽰")
layout = QVBoxLayout()
# 创建view
listview = QListView()
# 创建model
listModel = QStringListModel()
self.list = ["列表项1", "列表项2", "列表项3"]
listModel.setStringList(self.list)
# 关联view和model
listview.setModel(listModel)
t(self.clicked)
layout.addWidget(listview)
self.setLayout(layout)
def clicked(self, item):
QMessageBox.information(self, "QListView", "您选择了:" + self.w()])
if __name__ == '__main__':
app = QApplication(sys.argv)
main = ListViewDemo()
main.show()
<_())
运⾏效果:
此处使⽤了QListView创建了关联列表的view,然后使⽤QStringListModel()可以创建列表model。setStringList则是往model中添加数据,数据类型为列表。
扩展的列表控件(QListWidget)
扩展的列表控件(QListWidget)⽀持两种增添数据的⽅式:MVC模式和⾮MVC模式。
⽽且QListWidget本⾝就是QListView的⼦类:
class QListWidget(QListView)
相⽐于其⽗类,QListWidget更加灵活,增添了⾏数据变化和列数据变化等数据变化有关的信号;⽀持数据插⼊;⽀持⾮MVC模式的数据增添。
下⾯演⽰使⽤扩展控件QListWidget的⾮MVC模式创建列表
class ListWidgetDemo(QMainWindow):
def __init__(self):
super(ListWidgetDemo, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QListWidget演⽰")
self.listwidget = QListWidget()
size(300, 120)
# 使⽤addItem⼀下增添⼀个
self.listwidget.addItem("item1")
self.listwidget.addItem("item2")
# 使⽤addItems⼀下增添多个
self.listwidget.addItems(["item3", "item4", "item5"])
self.t(self.clicked)
self.setCentralWidget(self.listwidget)
def clicked(self, index):
QMessageBox.information(self, "QListWidget", "您选择了" + self.listwidget.item(w(index)).text())
if __name__ == '__main__':
app = QApplication(sys.argv)
main = ListWidgetDemo()
main.show()
<_())
运⾏结果:
这个例⼦中我们选择了第五项,w(index)的值便是4
扩展的表格控件(QTableWidget)
QTableWidget(扩展的表格控件)是QTableView控件的⼦类。可以通过⾮MVC的⽅式往控件中添加数据。
每⼀个单元格都是⼀个QTableWidgetItem对象,这意味着我们每添加⼀个单元格的数据都需要创建⼀个QTableWidgetItem对象。
class ListWidgetDemo(QWidget):
def __init__(self):
super(ListWidgetDemo, self).__init__()
self.initUI()
qt listviewdef initUI(self):
self.setWindowTitle("QTableWidget演⽰")
layout = QHBoxLayout()
tablewidget = QTableWidget()
# 设置⾏数与列数
tablewidget.setRowCount(4)
tablewidget.setColumnCount(3)
# 设置标签⾏
tablewidget.setHorizontalHeaderLabels(['姓名', '年龄', '籍贯'])
nameItem = QTableWidgetItem("⼩明")
tablewidget.setItem(0, 0, nameItem)
ageItem = QTableWidgetItem("24")
tablewidget.setItem(0, 1, ageItem)
homeItem = QTableWidgetItem("北京")
tablewidget.setItem(0, 2, homeItem)
layout.addWidget(tablewidget)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = ListWidgetDemo()
main.show()
<_())
运⾏效果:
我们发现这些格⼦是可以编辑的,我们也可以设置使其不能被编辑:tablewidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
只要增加这句话,那么表格就不能被编辑。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。