PyQt5 TableView组件
一、话不多说,先看图本次要实现的是主窗口内添加widget组件,widget内设置成垂直盒布局,然后在布局中添加tableView、PushButton组件二、看main函数if __name__ == '__main__':app = QApplication(sys.argv)# 现在这创建 主窗口 (不然会闪退) 不然就继承mainWindow = QMainWindow()mainWind
·
一、话不多说,先看图
本次要实现的是主窗口内添加widget组件,widget内设置成垂直盒布局,然后在布局中添加tableView、PushButton组件
二、看main函数
if __name__ == '__main__': app = QApplication(sys.argv) # 现在这创建 主窗口 (不然会闪退) 不然就继承 mainWindow = QMainWindow() mainWindow.setWindowTitle('QMainWindow-QWidget-TableView 测试') mainWindow.resize(500, 400) # 一定要创建个实例出来 要有个 a 名字随便你取 a = My_Window(mainWindow) sys.exit(app.exec_())
三、看自己写的 类 My_Window
class My_Window: def __init__(self, mainWindow): # 创建一个 widget 组件 widget = QWidget() mainWindow.setCentralWidget(widget) # 创建一个垂直盒布局,并放在widget里面 self.vboxlayout = QVBoxLayout(widget) # 函数调用 初始化 tableView self.tableView_init() # 调用 button 组件初始化函数 self.button_init() # 展示主窗口 mainWindow.show() def button_init(self): # 创建一个按钮 self.button = QPushButton('添加项') # 将按钮添加到垂直盒布局里 self.vboxlayout.addWidget(self.button) # 按钮组件连接槽函数 self.button.clicked.connect(self.tableView_add) # 创建一个按钮 self.button1 = QPushButton('删除项') # 将按钮添加到垂直盒布局里 self.vboxlayout.addWidget(self.button1) # 按钮组件连接槽函数 self.button1.clicked.connect(self.tableView_del_low) # 创建一个按钮 self.button3 = QPushButton('删除有项') # 将按钮添加到垂直盒布局里 self.vboxlayout.addWidget(self.button3) # 按钮组件连接槽函数 self.button3.clicked.connect(self.tableView_clear) def tableView_init(self): # 创建一个 0行3列 的标准模型 self.model = QStandardItemModel(0, 3) # 设置表头标签 self.model.setHorizontalHeaderLabels(['姓名', '年龄', '年薪']) # 创建 tableView 组件 self.tableview = QTableView() # 将 tableView 添加到垂直盒布局里 self.vboxlayout.addWidget(self.tableview) # tableView 组件 设置模型 self.tableview.setModel(self.model) self.tableview.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # 所有列自动拉伸,充满界面 self.tableview.setSelectionMode(QAbstractItemView.SingleSelection) # 设置只能选中整行 self.tableview.setEditTriggers(QTableView.NoEditTriggers) # 不可编辑 self.tableview.setSelectionBehavior(QAbstractItemView.SelectRows) # 设置只能选中一行 # self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows) # 设置只能选中整行 # self.tableView.setSelectionMode(QAbstractItemView.ExtendedSelection) # 设置只能选中多行 def tableView_add(self): print('a') # 写全 item1 = QStandardItem('%s' % '小朱') item2 = QStandardItem('%s' % '21') item3 = QStandardItem('%s' % '14w') print('b') self.model.appendRow([item1, item2, item3]) print('c') # 简写 self.model.appendRow([ QStandardItem('%s' % '小明'), QStandardItem('%s' % '20'), QStandardItem('%s' % '15w'), ]) print('d') def tableView_del_low(self): index = self.tableview.currentIndex() # 取得当前选中行的index self.model.removeRow(index.row()) # 通过index的row()操作得到行数进行删除 def tableView_clear(self): # 会全部清空,包括那个标准表头 self.model.clear() # 所以重新设置标准表头 自己将一下代码注释 尝试 self.model.setHorizontalHeaderLabels(['姓名', '年龄', '年薪'])
四、完整代码
完整代码就是将 三和四 的代码复制到同一个python文件就行啦
五、关于TableView知识点
# 创建一个 0行3列 的标准模型 self.model = QStandardItemModel(0, 3) # 设置表头标签 self.model.setHorizontalHeaderLabels(['姓名', '年龄', '年薪'])
# 创建 tableView 组件 self.tableview = QTableView() # 将 tableView 添加到垂直盒布局里 self.vboxlayout.addWidget(self.tableview) # tableView 组件 设置模型 self.tableview.setModel(self.model)
self.tableview.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # 所有列自动拉伸,充满界面 self.tableview.setSelectionMode(QAbstractItemView.SingleSelection) # 设置只能选中整行 self.tableview.setSelectionBehavior(QAbstractItemView.SelectRows) # 设置只能选中一行 self.tableview.setEditTriggers(QTableView.NoEditTriggers) # 不可编辑
self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows) # 设置只能选中整行 self.tableView.setSelectionMode(QAbstractItemView.ExtendedSelection) # 设置只能选中多行
index = self.tableview.currentIndex() # 取得当前选中行的index self.model.removeRow(index.row()) # 通过index的row()操作得到行数进行删除
# 会全部清空,包括那个标准表头 self.model.clear() # 所以重新设置标准表头 自己将一下代码注释 尝试 self.model.setHorizontalHeaderLabels(['姓名', '年龄', '年薪'])
不是唯一写法,有些我也还不知道 self.model.appendRow([ QStandardItem('%s' % '小明'), QStandardItem('%s' % '20'), QStandardItem('%s' % '15w'), ])
更多推荐
所有评论(0)