本篇介绍PyQt5中的QTableWidget,QTableWidget是一个表格控件。表格的第一行是行表头,第一列为列表头,除表头之外既是表格工作区。每一个单元格cell既是一个QTableWidgetItem对象。本篇Demo介绍QTableWidget对表格的操作。

新建一个窗口

窗口左面是表格的设置区域,中间区域是tableWidget控件,右侧是一个textBrowser,用来显示表格内的内容。

UI

QTableWidget

  • 定义一个枚举类型类,来表示每个单元格的类型。
class CellTyp(Enum):    ctName = 1000    ctSex = 1001    ctBirth = 1002    ctNation = 1003    ctAge = 1004    ctIsMarried = 1005
  • 设置表头
  1. setColumnCount:设置列数。
  2. QTableWidgetItem:每一个cell就是一个QTableWidget对象,创建单元格。
  3. setFont:设置字体大小。
  4. setBackground:设置单元格背景颜色。
  5. setHosetrizontalHeaderItem:设置行表头。
def btnSetHeader_clicked(self):    headerList = ["姓名", "省份", "性别", "出生日期", "民族", "年龄", "是否已婚"]    self.tableWidget.setColumnCount(len(headerList))    for i in range(len(headerList)):        headerItem = QTableWidgetItem(headerList[i])        font = headerItem.font()        font.setPointSize(11)        headerItem.setFont(font)        headerItem.setBackground(QBrush(Qt.red))        self.tableWidget.setHorizontalHeaderItem(i, headerItem)

设置表头

  • 设置行数
  1. 根据spinBox内的数值设置表格的行数。
  2. setRowCount:设置行数。
  3. setAlternatingRowColors:设置是否交替行背景颜色。
def btnSetRows_clicked(self):    self.tableWidget.setRowCount(self.spinBox.value())    self.tableWidget.setAlternatingRowColors(self.chkBoxBackground.isChecked())

设置行数

现在就可以在表格内输入值了

  • tableWidget内常用的信号
  1. currentCellChanged:当前单元格的选择发生改变,传递当前单元格的行号和列号。
  2. currentItemChanged:和currentCellChanged一样。传递的是两个QTableWidgetItem对象。
  3. cellChanged:单元格内的值发生改变。
  4. cellClicked:鼠标点击单元格。
  5. cellDoubleClicked:鼠标双击单元格。

当单元格内发生改变之后,先读取单元格内内容。

item = self.tableWidget.item(currentRow, currentColumn)cellText = item.text()

如果性别列内是男生,则在设置该单元格的ico为男性标志。如果民族列内不是汉族,则把单元格的背景颜色设置为蓝色。如果出生日期列内值发生改变,则自动计算岁数。

def currentCellChanged(self, currentRow, currentColumn):    try:        icoPathMale = os.getcwd() + "Icon男.ico"        icoPathFemale = os.getcwd() + "Icon女.ico"        item = self.tableWidget.item(currentRow, currentColumn)        cellText = item.text()        if currentColumn == 2:            if cellText == "男":                ico = QIcon(icoPathMale)                item2 = QTableWidgetItem("  男", CellTyp.ctSex.value)                item2.setIcon(ico)                self.tableWidget.setItem(currentRow, 2, item2)            if cellText == "女":                ico = QIcon(icoPathFemale)                item2 = QTableWidgetItem("  女", CellTyp.ctSex.value)                item2.setIcon(ico)                self.tableWidget.setItem(currentRow, 2, item2)        if currentColumn == 3:            birthYear = int(cellText[:4])            dataTime = int(QDate.currentDate().year())            age = dataTime - birthYear            item2 = QTableWidgetItem(str(age), CellTyp.ctAge.value)            self.tableWidget.setItem(currentRow, 5, item2)        if currentColumn == 4:            if cellText != "汉族":                item2 = QTableWidgetItem(cellText, CellTyp.ctNation.value)                item2.setBackground(QBrush(Qt.blue))                self.tableWidget.setItem(currentRow, 4, item2)    except Exception as e:        print(e)

添加内容

  • 插入行、添加行、删除行和清除内容。
    def btnInsertRow_clicked(self):        currentRow = self.tableWidget.currentRow()        self.tableWidget.insertRow(currentRow)    def btnAppendRow_clicked(self):        currentRow = self.tableWidget.rowCount()        self.tableWidget.insertRow(currentRow)    def btnDelCurRow_clicked(self):        currentRow = self.tableWidget.currentRow()        self.tableWidget.removeRow(currentRow)    def btnClear_clicked(self):        self.tableWidget.clearContents()

添加删除表格

  • 自动宽和高
def btnAutoHeight_clicked(self):    self.tableWidget.resizeRowsToContents()def btnAutoWidth_clicked(self):    self.tableWidget.resizeColumnsToContents()

自动宽和高

  • 设置表头是否显示
def chkBoxRowHeader_clicked(self, checked):    self.tableWidget.horizontalHeader().setVisible(checked)def chkBoxColHeader_clicked(self, checked):    self.tableWidget.verticalHeader().setVisible(checked)
  • 表格是否使用交替底色显示
def chkBoxBackground_clicked(self, checked):    self.tableWidget.setAlternatingRowColors(checked)
  • 选择模式,每次点击时选择单元格还是每一行
def radioRowSelect_clicked(self):    selMode = QAbstractItemView.SelectRows    self.tableWidget.setSelectionBehavior(selMode)def radioCellSelect_clicked(self):    selMode = QAbstractItemView.SelectItems    self.tableWidget.setSelectionBehavior(selMode)
  • 表格是否可以编辑
def chkBoxEditable_clicked(self, checked):    if checked:        trig = (QAbstractItemView.DoubleClicked | QAbstractItemView.SelectedClicked)    else:        trig = QAbstractItemView.NoEditTriggers    self.tableWidget.setEditTriggers(trig)

其他属性

  • 遍历读取表格内容

注意:表格内的须有内容,不然会报错。

def btnGetText_clicked(self):    try:        rowCount = self.tableWidget.rowCount()        colCount = self.tableWidget.columnCount()        for i in range(rowCount):            strText = "第 %d 行: " % (i+1)            for j in range(colCount):                cellItem = self.tableWidget.item(i, j)                strText = strText + cellItem.text() + " "            self.textBrowser.setText(strText)    except Exception as e:        print(e)

遍历读取表格内容

一个简单的案例介绍QTableWidget的使用。如果需要源代码可关注私聊,感谢支持!!!!

pyqt5 tablewidget 设置行高_Python+PyQt5基础开发(10)相关推荐

  1. python打地鼠游戏代码_Python 0基础开发游戏:打地鼠(详细教程)VS code版本

    如果你没有任何编程经验,而且想尝试一下学习编程开发,这个系列教程一定适合你,它将带你学习最基本的Python语法,并让你掌握小游戏的开发技巧.你所需要的,就是付出一些时间和耐心来尝试这些代码和操作.文 ...

  2. python打地鼠游戏教程_Python 0基础开发游戏:打地鼠(详细教程)VS code版本

    如果你没有任何编程经验,而且想尝试一下学习编程开发,这个系列教程一定适合你,它将带你学习最基本的Python语法,并让你掌握小游戏的开发技巧.你所需要的,就是付出一些时间和耐心来尝试这些代码和操作.文 ...

  3. python 动态调整控件大小_python PyQt5如何让窗口控件与窗口大小同步变化?

    在下面的代码中 self.tableWidget.resize(self.width()-20,self.height()-20) self.tableWidget.move(10,20) 这两行没有 ...

  4. designer pyqt5 界面切换_PyQt5快速上手基础篇3-设置窗口标题和图标

    前言 本节我们为QT Designer生成的UI界面添加图标和窗口标题. 一.实例运行 1. QT Designer设计UI 打开designer.exe,使用默认的Main Window创建,直接点 ...

  5. SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题...

    转:http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发--关于TreeView树形控 ...

  6. html5游戏开发-零基础开发《圣诞老人送礼物》小游戏

    开言: 以前lufy前辈写过叫"html5游戏开发-零基础开发RPG游戏"的系列文章,在那里面我学习了他的引擎以及了解了游戏脚本.自从看了那几篇文章,我便对游戏开发有了基本的认识. ...

  7. html table设置行高_单元格的行高怎么设置 html语言怎么设置设置表格行高?

    在Excel中,如何设置表格最合适的行高.列宽? 本次操作使用的软件为Excel电子表格,软件版本为office家庭和学生版2016. 小编只是难过不能陪你一起到老,再也没有机会,看到你的笑. 请问怎 ...

  8. Dfinity(ICP)基础开发教程-5

    Dfinity 基础开发教程 教程概述 快速启动提供了没有停下来欣赏沿途的风景部署简单的默认应用程序快速路径. 此文章介绍了特定场景,并指出了在每个步骤中执行的操作和详细信息. 如果快速入门和教程不完 ...

  9. DELPHI基础开发技巧

    ◇[DELPHI]网络邻居复制文件 uses shellapi; copyfile(pchar('newfile.txt'),pchar('//computername/direction/targe ...

  10. html table设置行高_html5行高怎么设置 Excel做的表格怎么打印

    尝试了很多方法 CSS中设置行高 front-size 可以用 但是 line-heigh就不固定高度html源代码: 固定高度 .div-height{border:1px solid #F00; ...

最新文章

  1. POJ 3174 暴力枚举
  2. jsp页面生成验证码且验证
  3. word邮件合并一页8个_办公软件小课堂||word邮件合并
  4. 华为与各国政府签订无间谍无后门协议
  5. 【企业管理】围绕价值创造开展人力资源管理
  6. java iter是否存在_Java中ListIterator和Iterator的区别以及ListIterator的应用
  7. RDBMS数据定时采集到HDFS
  8. 接口开发指的是什么_企业在什么情况下要选择定制开发软件
  9. macos xampp mysql 命令_MAC系统XAMPP 中 MySQL命令行client配置使用
  10. 五子棋项目结束总结_居家活动系列总结
  11. vb6 datagrid表格垂直居中_老板不喜欢看你的Excel表格,学完这些美化技巧,早日升职加薪...
  12. linux安装协议,在Linux中安装IPv6协议
  13. WIN7下VS2005 VS2008 SQLSERVER2005安装顺序
  14. 关于Oracle分区的一篇文章
  15. oracle 的insert into的详解
  16. 怎么将多张图片打印在一张A4纸上?
  17. 前端-table表格隔行变色
  18. 端午福福福福福福福福福福福福福福福福利
  19. 测人品,看是否满足条件
  20. esp8266驱动四脚oled显示文字和图片

热门文章

  1. 关于内存泄漏检测问题,和大家一起分享
  2. OpenStack是吞噬金钱和人力的怪兽吗?
  3. apache安装、配置虚拟主机、配置日志
  4. Qt qtextstream读取文件
  5. hough变换是如何检测出直线和圆的?
  6. Linux操作系统基本使用知识
  7. Python中将字典保存为文件并读取
  8. 谷歌登录com.google.andriod.gms.common.api.ApiException:10异常处理
  9. java 7 学习笔记_Java学习笔记7
  10. 鸿蒙系统的正式推送范围,华为鸿蒙系统或6月正式推送升级,手机版已开始小范围推送...