PyQt5中的QTablewidget

环境 PyQt5 + VSCode

Qt Designer生成界面

在VSCode的资源管理器中,右键选择 PYQT:New Form,打开Qt Designer
在这里插入图片描述
选择新建Dialog without Buttons,点击 创建
在这里插入图片描述
在左侧的Item Widgets中将 Table Widget拖入Dialog窗体中。
在这里插入图片描述
得到界面
在这里插入图片描述
将文件保存为tablewidget1.ui。
在VSCode中,右键点击文件tablewidget1.ui, 选Compile From,
在这里插入图片描述

得到Ui_tablewidget1.py文件。
在这里插入图片描述

运行

新建tablewidget1.py文件。
tablewidget1.py 内容如下

from Ui_tablewidget import Ui_Dialog
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QTableWidgetItem, QAbstractItemViewclass MyDialog(QtWidgets.QDialog,  Ui_Dialog):def __init__(self,  parent=None): super().__init__(parent)self.setupUi(self)self.setWindowTitle("表格")self.tableWidget.setRowCount(10)#设置表格的行数self.tableWidget.setColumnCount(2)#设置表格的列数self.tableWidget.setColumnWidth(0,80)#设置第0列的宽度self.tableWidget.setColumnWidth(1,100)#设置第1列的宽度self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)#选中整行模式self.tableWidget.setHorizontalHeaderLabels(['姓名','班别']) #水平标题names = ['小天','小米','小云','小月','小芳','小贝','小美','小亮','小欢','小阳']classes = ['一班','一班','一班','二班','二班','二班','二班','三班','三班','三班']i = 0for item in names:self.tableWidget.setItem(i,0, QTableWidgetItem(item))#添加内容到表格中self.tableWidget.setItem(i,1, QTableWidgetItem(classes[i]))#添加内容到表格中i += 1self.tableWidget.cellClicked.connect(self.tw_cell_clicked)#单击时触发def tw_cell_clicked(self):row = self.tableWidget.currentRow()#获取当前选中的行column = self.tableWidget.currentColumn()#获取挡墙选中的列t = self.tableWidget.item(row,0).text()#获取指定行、第0列的内容print(t)if __name__=="__main__":app = QApplication([])dialog = MyDialog()dialog.exec_()

按F5运行,得到
在这里插入图片描述

点击单元格时,控制台会显示当前行的第一列内容
在这里插入图片描述
方法

tableWidget.setRowCount(row_num)#设置表格的行数 
tableWidget.setColumnCount(col_num)#设置表格的列数 tableWidget.resizeColumnsToContents()#根据列内容设置列宽 
tableWidget.resizeRowsToContents()#根据行内容设置行高 
tableWidget.setColumnWidth(int column,int width)#设置某列的宽度 
tableWidget.setRowHeight(int row,int height)#设置某行的行高tableWidget.setHorizontalHeaderLabels(['姓名','邮件','电话'])#水平表头
tableWidget.setVerticalHeaderLabels(['一','二','三'])#垂直表头tableWidget.columnCount()#获取当前表格列数 
tableWidget.rowCount()#获取当前表格行数from PyQt5.QtWidgets import QTableWidgetItem 
tableWidget.setItem(0,0, QTableWidgetItem("小天"))#添加元素到0行0列tableWidget.item(row,col).text() #获取某行,列中的内容tableWidget.currentColumn()#获取当前选中的列 ,未选中时显示-1
tableWidget.currentRow()#获取当前选中的行,未选中时显示-1# 设置选中 
selectedItem = tableWidget.item(0, 0)#获取0行0列的元素
tableWidget.setCurrentItem(selectedItem)#设置选中0行0列from PyQt5.QtWidgets import QAbstractItemView 
tableWidget.setSelectionBehavior(QAbstractItemView.SelectColumns)#设置为选择整列 
tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)#设置选择整行 
tableWidget.setSelectionBehavior(QAbstractItemView.SelectItems)#设置选择单个单元格#设置为item不可被编辑
from PyQt5.QtCore import Qt
item = QTableWidgetItem("123") 
item.setFlags(item.flags() & ~Qt.ItemIsEditable) #Qt.ItemIsEditable可编辑 ~Qt.ItemIsEditable不可编辑
tableWidget.setItem(0,0, item ) #item放入0行0列

信号

信号内容
cellClicked单击时
cellDoubleClicked双击时
itemChanged项目发生改变时

滚动条

方法

方法内容
vertical_scrollbar = table_widget.verticalScrollBar()获取垂直滚动条
horizontal_scrollbar = table_widget.horizontalScrollBar()获取水平滚动条
vertical_position = vertical_scrollbar.value()获取垂直滚动条的位置
horizontal_position = horizontal_scrollbar.value()获取水平滚动条的位置
vertical_scrollbar.setValue(vertical_position)设置垂直滚动条的位置
horizontal_scrollbar.setValue(horizontal_position)设置水平滚动条的位置

对于垂直滚动条,位置是最上方显示的行的行数(行数从0开始);对于水平滚动条,位置是最左边显示的列的列数(列数从0开始)

滚动条的信号

信号内容
valueChanged当位置改变时
from Ui_tablewidget import Ui_Dialog
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QTableWidgetItem
from PyQt5.QtWidgets import QAbstractItemView
class MyDialog(QtWidgets.QDialog,  Ui_Dialog):def __init__(self,  parent=None):super().__init__(parent)self.setupUi(self)self.setWindowTitle("表格")self.tableWidget.setRowCount(10)self.tableWidget.setColumnCount(2)self.tableWidget.setColumnWidth(0,80)self.tableWidget.setColumnWidth(1,100)self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)self.tableWidget.setHorizontalHeaderLabels(['姓名','班别'])names = ['小天','小米','小云','小月','小芳','小贝','小美','小亮','小欢','小阳']classes = ['一班','一班','一班','二班','二班','二班','二班','三班','三班','三班']i = 0for item in names:self.tableWidget.setItem(i,0, QTableWidgetItem(item))self.tableWidget.setItem(i,1, QTableWidgetItem(classes[i]))i += 1self.vertical_scrollbar = self.tableWidget.verticalScrollBar()#获取垂直的滚动条self.vertical_scrollbar.valueChanged.connect(self.on_vertical_scrollbar_changed)#滚动条的值改变时触发def on_vertical_scrollbar_changed(self):value = self.vertical_scrollbar.value()#获取滚动条的值print(value)if __name__=="__main__":app = QApplication([])dialog = MyDialog()dialog.exec_()

按F5运行,拖动滚动条时,控制台显示滚动条的位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/652125.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于移动端的uniapp城市应急救援求援系统 微信小程序

本毕业设计的内容是设计实现一个基于 uniapp微信小程序的城市应急救援辅助系统。使用微信开发者是以java语言进行开发,MYSQL为数据库开发平台,城市应急救援辅助系统的功能已基本实现,主要包括有用户、完善个人档案、求援信息上报、医院信息、…

让ThreadPoolExecutor无所遁形:Java线程池运行原理详解

ThreadPoolExecutor的核心工作原理 当我们在Java中讨论并发和多线程时,ThreadPoolExecutor 是不可或缺的一个类。在 java.util.concurrent 包下,该类负责管理线程池内的线程,包括线程的创建、执行、管理以及线程池的监控等。理解 ThreadPool…

汽车底盘域的学习笔记

前言:底盘域分为传统车型底盘域和新能源车型底盘域(新能源系统又可以分为纯电和混动车型,有时间可以再研究一下) 1:传统车型底盘域 细分的话可以分为四个子系统 传动系统 行驶系统 转向系统 制动系统 1.1传动系…

STM32H7 HSE时钟的使用方法介绍

目录 概述 1 STM32H750 HSE时钟介绍 2 使用STM32Cube创建Project 3 认识HSE时钟 3.1 HSE时钟的特性 3.2 HSE的典型应用电路 4 STM32Cube中配置时钟 4.1 时钟需求 4.2 配置参数 4.2.1 使能外围资源 4.2.2 使用STM32Cube注意项 4.2.3 配置参数 5 总结 概述 本文主要…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.3

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

便携式应急指挥箱规格参数

概况: 微缩型的无线视频音频传输的机动挥所。体积小、重量轻、公配电方便、携带便携、功能齐全。可进行单兵作战,通过此无线音频视频传输的指挥箱能完成现场图像、语音、数据的采集等功能,可以通过5G/4G/WIFI等多种无线网络完成传输的需求,或…

【深度学习】YOLOv5,金属表面的缺陷检测,GC10-DET数据集

目录: 文章目录 数据集数据集转换下载yolov5创建 dataset.yaml训练参数开始训练数据分布训练结果问询、帮助 数据集 数据集地址: https://github.com/lvxiaoming2019/GC10-DET-Metallic-Surface-Defect-Datasets 数据集下载方式: Downlo…

openWebUI+ollamawindows+不用docker+webLite本地安装

openWebUI & ollama & windows & 不用docker & webLite 本地安装 总结一下安装教程 10核CPU16G内存 两个web框架都可以,先说简单的 ollama-webui-lite(https://github.com/ollama-webui/ollama-webui-lite) 轻量级,只使用nodejs 先装…

kaggle之皮肤癌数据的深度学习测试

kaggle之皮肤癌数据的深度学习测试 近期一直在肝深度学习 很久之前,曾经上手搞过一段时间的深度学习,似乎是做轮胎花纹的识别,当初用的是TensorFlow,CPU版本的,但已经很长时间都没弄过了 现在因为各种原因&#xff…

编程学习路线

Java最强学习路线 快来官网定制一套属于自己的学习路线吧 官方网址: Learn to become a modern Java developerCommunity driven, articles, resources, guides, interview questions, quizzes for java development. Learn to become a modern Java developer by…

MySQL中脏读与幻读

一般对于我们的业务系统去访问数据库而言,它往往是多个线程并发执行多个事务的,对于数据库而言,它会有多个事务同时执行,可能这多个事务还会同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决 我们来看…

Vscode上使用Clang,MSVC, MinGW, (Release, Debug)开发c++完全配置教程(包含常见错误),不断更新中.....

1.VSCode报错头文件找不到 clang(pp_file_not_found) 在Fallback Flags中添加 -I(是-include的意思,链接你的编译器对应头文件地址,比如我下面的是MSVC的地址) 问题得到解决~