[PyQt⼊门教程]PyQt5中数据表格控件QTableWidget使⽤⽅法
如果你想让你开发的PyQt5⼯具展⽰的数据显得整齐、美观、好看,显得符合你的⽓质,可以考虑使⽤QTableWidget控件。之前⼀直使⽤的是textBrowser⽂本框控件,数据展⽰还是不太美观。其中QTableWidget是PyQt5程序中常⽤的显⽰数据表格的控件,显⽰的基本效果如下,有点素。。
下⾯开始介绍QTableWidget常⽤的⽅法以及如何使⽤。既然是数据表格形式,经常使⽤的场景其实跟excel我觉得差不多。开始学习使⽤QTableWidget之前,我们带着如下⼏个问题再开始本⽂的阅读。
1、如何在GUI界⾯上创建QTableWidget表格?指定N⾏M列,列名称等等
2、如何在表格⾥添加每⼀个单元格的数据?
3、如何排版数据表格的数据,⽐如你想单元格内容居中、左对齐、右对齐等。
4、如何设置⽂字显⽰颜⾊、如何设置单元格背景⾊?
5、如何合并指定单元格,让排版更合理?
基本上使⽤数据表格展⽰数据常见的问题就是这些,能够熟练使⽤QTableWidget解决上述问题,QTableWidget基本使⽤⽅法应该就会了。下⾯开始学习本⽂内容。QTableWidget常⽤⽅法
setROwCount(int row) 设置QTableWidget表格控件的⾏数
setColumnCount(int col) 设置QTableWidget表格控件的列数
setHorizontalHeaderLabels() 设置QTableWidget表格控件的⽔平标签
setVerticalHeaderLabels() 设置QTableWidget表格控件的垂直标签
setItem(int ,int ,QTableWidgetItem) 在QTableWidget表格控件的每个选项的单元控件内添加控件
horizontalHeader() 获得QTableWidget表格控件的表格头,以便执⾏隐藏
rowCount() 获得QTableWidget表格控件的⾏数
columnCount() 获得QTableWidget表格控件的列数
setEditTriggers(EditTriggers triggers) 设置表格是否可以编辑,设置表格的枚举值
setSelectionBehavior 设置表格的选择⾏为
setTextAlignment() 设置单元格内⽂本的对齐⽅式
setSpan(int row,int column,int rowSpanCount,int columnSpanCount) 合并单元格,要改变单元格的第row⾏,column列,要合并rowSpancount⾏数和columnSpanCount列数。其中row表⽰要改变的⾏数, column表⽰要改变的列数,rowSpanCount表⽰需要合并的⾏数,columnSpanCount表⽰需要合并的列数。
setShowGrid() 在默认情况下表格的显⽰是有⽹格的,可以设置True或False⽤于是否显⽰,默认True
setColumnWidth(int column,int width) 设置单元格⾏的宽度
setRowHeight(int row,int height) 设置单元格列的⾼度
这⾥的函数有些有点不好理解,⽐如setSpan()合并单元格函数,你可能⼀下不知道它的使⽤⽅法以及实现效果。没关系,下⾯会通过实例讲解以及效果演⽰展⽰这些函数的使⽤⽅法。
QTableWidget使⽤实例
1、使⽤designer实现⼀个包含QTableWidget数据展⽰控件的窗体。界⾯设计⼀般都会采⽤designer⼯具,因为要考虑控件间的布局,纯代码实现会增加难度。界⾯实现如下
双击在窗体界⾯上的QTableWidget控件,分别选择Edit Table Widget中Columns、Rows、Items进⾏编辑。可以分别完成⾏、列标题以及单元格内容的添加。
完成后,效果图如下
2、使⽤pyuic5⼯具将.ui⽂件转换为.py⽂件。
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'cc.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_widget(object):
def setupUi(self, widget):
widget.setObjectName("widget")
self.tableWidget = QtWidgets.QTableWidget(widget)
self.tableWidget.setGeometry(QtCore.QRect(10, 130, 701, 192))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(4)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
item.setTextAlignment(QtCore.Qt.AlignCenter)
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(0, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(0, 1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(0, 2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(0, 3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(1, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(1, 1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(1, 2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(1, 3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(2, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(2, 1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(2, 2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(2, 3, item)
self.tableWidget.horizontalHeader().setCascadingSectionResizes(True) anslateUi(widget)
tSlotsByName(widget)
def retranslateUi(self, widget):
_translate = anslate
widget.setWindowTitle(_translate("widget", "员⼯信息表"))
item = self.tableWidget.verticalHeaderItem(0)
item.setText(_translate("widget", "1"))
item = self.tableWidget.verticalHeaderItem(1)
item.setText(_translate("widget", "2"))
item = self.tableWidget.verticalHeaderItem(2)
item.setText(_translate("widget", "3"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("widget", "姓名"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("widget", "年龄"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("widget", "性别"))
item = self.tableWidget.horizontalHeaderItem(3)
item.setText(_translate("widget", "基本信息"))
__sortingEnabled = self.tableWidget.isSortingEnabled()
self.tableWidget.setSortingEnabled(False)
item = self.tableWidget.item(0, 0)
item.setText(_translate("widget", "张三"))
item = self.tableWidget.item(0, 1)
item.setText(_translate("widget", "23"))
item = self.tableWidget.item(0, 2)
item.setText(_translate("widget", "Male"))
item = self.tableWidget.item(0, 3)
item.setText(_translate("widget", "家⾥有矿"))
item = self.tableWidget.item(1, 0)
item.setText(_translate("widget", "王⼋"))
item = self.tableWidget.item(1, 1)
item.setText(_translate("widget", "25"))
item = self.tableWidget.item(1, 2)
item.setText(_translate("widget", "Female"))
item = self.tableWidget.item(1, 3)
item.setText(_translate("widget", "拆⼆代"))
item.setText(_translate("widget", "赵四"))
item = self.tableWidget.item(2, 1)
item.setText(_translate("widget", "28"))
item = self.tableWidget.item(2, 2)
item.setText(_translate("widget", "Male"))
item = self.tableWidget.item(2, 3)
item.setText(_translate("widget", "勤奋努⼒的程序员"))
self.tableWidget.setSortingEnabled(__sortingEnabled)
附designer⼯具设计完成的.ui⽂件代码。不作展⽰,⽅便有需要的读者下载使⽤。
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>widget</class>
<widget class="QWidget" name="widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>730</width>
<height>286</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="windowTitle">
<string>员⼯信息表</string>
</property>
<widget class="QTableWidget" name="tableWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>51</y>
<width>701</width>
rows函数的使用方法及实例<height>211</height>
</rect>
</property>
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>true</bool>
</attribute>
<row>
<property name="text">
<string>1</string>
</property>
</row>
<row>
<property name="text">
<string>2</string>
</property>
</row>
<row>
<property name="text">
<string>3</string>
</property>
</row>
<column>
<property name="text">
<string>姓名</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
<column>
<property name="text">
<string>年龄</string>
</property>
</column>
<column>
<property name="text">
<string>性别</string>
</property>
</column>
<column>
<property name="text">
<string>基本信息</string>
</property>
</column>
<item row="0" column="0">
<property name="text">
<string>张三</string>
</property>
</item>
<item row="0" column="1">
<property name="text">
<string>23</string>
</property>
</item>
<item row="0" column="2">
<property name="text">
<string>Male</string>
</property>
</item>
<item row="0" column="3">
<property name="text">
<string>家⾥有矿</string>
</property>
</item>
<item row="1" column="0">
<property name="text">
<string>王⼋</string>
</property>
</item>
<item row="1" column="1">
<property name="text">
<string>25</string>
</property>
</item>
<item row="1" column="2">
<property name="text">
<string>Female</string>
</property>
</item>
<item row="1" column="3">
<property name="text">
<string>拆⼆代</string>
</property>
</item>
<item row="2" column="0">
<property name="text">
<string>赵四</string>
</property>
</item>
<item row="2" column="1">
<property name="text">
<string>28</string>
</property>
</item>
<item row="2" column="2">
<property name="text">
<string>Male</string>
</property>
</item>
<item row="2" column="3">
<property name="text">
<string>勤奋努⼒的程序员</string>
</property>
</item>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>250</x>
<y>20</y>
<width>111</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<family>YaHei Consolas Hybrid</family>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>员⼯信息展⽰</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
View Code
3、编写主程序,调⽤界⾯.py⽂件。使业界⾯和逻辑程序分离,这样的好处就是后⾯界⾯任何改动程序逻辑⼏乎不会有什么⼤的影响。# -*- coding: utf-8 -*-
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论