第15.28节 PyQt(Python+Qt)入门学习:Model/View架构中的便利类QTableWidget详解

Qtablewidget使用QHeaderView设置表头 阅读详情

一、引言

表格部件为应用程序提供标准的表格显示工具,在表格内可以管理基于行和列的数据项,表格中的最大数据项数为总行数和总列数的乘积,另外在表格中可以设置水平和垂直标题。

表格部件对应类为QTableWidget ,QTableWidget 表格部件中的项类型为QTableWidgetItem类。QTableWidget 从QTableView派生的子类,内置默认模型,如果表格展现的应用需要使用自己的数据模型,则应使用QTableView类,而不是QTableWidget 类。

二、QTableWidget的属性

2.1、概述

除了从父类继承的属性外,在Designer中QTableWidget只有两个属性,就是行数rowCount和列数columnCount,另外还有一部分就是用于设置表头的属性。如图:
在这里插入图片描述

2.2、行数rowCount

QTableWidget的rowCount属性保存表格部件中的行数,在QTableWidget创建时如果没有指定行数,则缺省行数为0,QTableWidget创建后可以通过 setRowCount方法调整行数。

要获取当前表格部件中的行数,可以通过rowCount()方法获取,要设置表格部件的行数,可以通过setRowCount(int rows)调整表格的行数,如果参数rows小于现在表格中的实际行数,则表格中超出参数的行数数据会丢弃,就算是后面将行数或列数恢复也不能恢复相关数据。

2.3、列数columnCount

columnCount属性保存表格部件中的列数,相关属性和操作方法和rowCount类似。在QTableWidget创建时如果没有指定列数,则缺省列数为0,QTableWidget创建后可以通过 setColumnCount方法调整。

columnCount可以通过columnCount()方法获取,通过setColumnCount(int columns)设置。

2.4、表头及属性

QTableWidget的表头包括横表头和竖表头,如下:
在这里插入图片描述
上面的“列1”、“列2”、“列3”为横表头,“行1”、“行2”、“行3”为竖表头。横表头可通过方法setHorizontalHeaderLabels来设置,竖表头可以通过setVerticalHeaderLabels来设置。这是创建表头的最简单方法,它们将为表的列和行提供简单的文本标题。

下面代码为上图设置表头的示例代码:

        self.tableWidget.setVerticalHeaderLabels(['行1','行2','行3'])
        self.tableWidget.setHorizontalHeaderLabels(['列1','列2','列3'])

除了上述简单方法外,还可以从表格部件的项创建更复杂的表头,相关方法在下面介绍QTableWidget的方法时再介绍。

除了设置表头文字外,表头还有相关属性设置,QTableWidget的表头属性是直接继承自QTableView的表头属性,相关属性的介绍请参考《PyQt(Python+Qt)学习随笔:QTableView的标题表头相关属性》。

三、QTableWidget的项QTableWidgetItem

3.1、概述

QTableWidgetItem类为QTableWidget类的项实例类,用于保存表格部件的信息。项的内容可包含文本、图标或复选框等。

默认情况下,QTableWidgetItem项是可用、可编辑、可选择和可选中的,并且可以用作拖放操作的源和拖放目标。如果要改变相关设置,可以通过使用setFlags()来更改每个项的标志(关于项的标记请参考《PyQt(Python+Qt)学习随笔:Model中项的标记flags取值及枚举类型Qt.ItemFlag》)。

QTableWidgetItem的方法分为构造方法、位置相关方法、数据及展现内容相关、操作相关四类。

3.2、构造方法

QTableWidgetItem的构造方法有4个:

  1. QTableWidgetItem(int type = Type):构建一个空项
  2. QTableWidgetItem( str text,int type = Type):构建一个带文本的项
  3. QTableWidgetItem( QIcon icon, str text, int type = Type) :构建一个带图标和文本的项
  4. QTableWidgetItem( QTableWidgetItem other):从other复制项的内容构建一个新项

3.3、位置相关方法

QTableWidgetItem项在QTableWidget中的位置包括三个属性来决定,就是表格部件对象、行和列,由于这三个属性决定了项在界面的哪个组件的哪个地方,因此老猿将相关方法归类为位置相关方法。QTableWidgetItem项方法中:

  • QTableWidget tableWidget():返回项所在的表格部件实例,如果项没有插入到树型部件中,则返回None
  • int row() :返回项所在表格的行,注意是从0开始计数
  • int column():返回项所在表格的列,注意是从0开始计数

3.4、数据和展现相关方法

在部件中的数据有多种属性,包括文本数据、图标、复选状态、工具栏提示toolTip、whatsThis帮助、状态提示statusTip等,在Qt中将这些称为同一个项的不同角色数据(关于数据的角色请参考《PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及含义》)。这些数据为呈现数据的不同状态情况,因此老猿将与此相关的方法归类为数据和展现相关方法。不同角色的数据在Qt中可以通过data和setData方法带角色参数统一访问,也可以通过各自不同的方法不带角色去访问。

3.4.1、项数据的data和setData访问方法

部件中的项数据可以通过项的data( int role) 方法获取项中指定列指定角色的数据,也可以通过setData(int role, QVariant value)方法设置指定角色的数据为value。例如项的文本可以通过data方法和setData方法使用Qt.DisplayRole、Qt.EditRole这两种角色去访问。

关于数据的角色请参考《PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及含义》。

注意:
  • role虽然是整数,但实际上是枚举类型 Qt.ItemDataRole
  • QVariant 表示任何PyQt的数据类型,所以value的类型没有约束
示例代码:
   
 		item.setData(QtCore.Qt.DecorationRole,QtGui.QIcon('.\\icon\\'+str(row+1)+'.gif'))#设置图标
        item.setData(QtCore.Qt.CheckStateRole, row%3) #设置复选状态
        item.setData(QtCore.Qt.TextAlignmentRole,col % 3)  #设置文本对齐方式
        
3.4.2、项文本数据访问的text和setText方法

项的文本可以通过data方法和setData方法使用Qt.DisplayRole、Qt.EditRole这两种角色去访问,除了这个方法外,还可以通过text() 和setText( str value)方法去访问。

  • text():获取项的文本数据
  • setText( str value):设置项的文本数据为value,注意没有返回值
3.4.3、项文本对齐方式访问的textAlignment和setTextAlignment方法

项中的文本可以设置水平和垂直对齐方式,相关对齐方式的访问方法调用方式如下:

  • int textAlignment() :返回对齐方式,返回类型是枚举类型Qt.Alignment,实际上是整数
  • setTextAlignment(int alignment):设置对齐方式,无返回值
注:

对齐方式是一个Qt.Alignment枚举类型的组合,具体取值及含义请参考《PyQt(Python+Qt)学习随笔:QListView的itemAlignment属性》。

3.4.4、项中图标访问的icon和setIcon方法

可以通过icon()来访问项的图标,通过setIcon( QIcon icon)来设置项的图标。

如下面代码将顶的图标设置为指定文件:

item.setIcon(QtGui.QIcon(r'F:\小图标\动物\动物-025.gif'))
3.4.5、项复选状态访问方法

项可以单独设置复选状态,如图所有项都设置了复选状态,每行的复选状态不同:
在这里插入图片描述
项的复选状态可以通过checkState()来获取,如果要改变项的复选状态可以调用setCheckState(Qt.CheckState state)来实施。

注意:
3.4.6、项提示信息相关操作方法

提示信息包括工具栏提示、状态栏提示和whatsThis提示:

  • 通过toolTip(int column)、setToolTip(int column, str toolTip)来操作toolTip
  • 通过statusTip(int column)、setStatusTip(int column, str statusTip)来操作statusTip
  • 通过whatsThis(int column)、setWhatsThis(int column, str whatsThis)来操作whatsThis

关于这三个提示信息的区别请参考《PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性》。

3.4.7、sizeHint相关方法

关于QTableWidgetItem项的sizeHint属性,Qt中的文档说明非常简单,作用也没有展开说明,仅介绍QTableWidgetItem中sizeHint为项的缺省大小,如果没有设置则根据项的数据自动计算项的大小。

为此老猿做了大量测试和验证,最终确认了QTableWidgetItem项的sizeHint的作用,QTableWidgetItem的sizeHint在项对应QHeadView表头的sectionResizeMode值为ResizeToContents时,作为计算项大小的一个因素:

  1. 判断项是否设置了sizeHint,如果没有设置则按项的内容计算项大小,确保项的内容在对应表头方向完整显示;
  2. 如果项设置了sizeHint,则取sizeHint的值作为项的大小。

具体请参考《PyQt学习随笔:QTableWidget项sizeHint的作用以及与QHeadView的sectionResizeMode、ResizeToContents的关系》和《PyQt(Python+Qt)学习随笔:QTableWidget表格部件中行高和列宽的计算方式》。

项的sizeHint相关访问方法及调用语法如下:
  • QSize sizeHint()
  • setSizeHint( QSize size)

3.5、项操作相关方法

QTableWidget中项操作相关的属性包括是否可用、是否可选中、是否可编辑、是否可复选、是否选中、是否复选等,这些属性的设置与影响界面上项的操作,所以老猿将其归类项操作相关方法。这些项操作相关方法所有Model/View相关类涉及项操作都是一样的。由于复选状态同时是项的展现状态,在前面数据和展现相关方法中已经介绍相关方法。

3.5.1、项标记相关方法

项的标记用于标记项是否可操作,由多个属性位组合而成,具体项标记的取值及含义请参考《PyQt(Python+Qt)学习随笔:Model中项的标记flags取值及枚举类型Qt.ItemFlag》。

项标记的访问方法及调用语法如下:

  • Qt.ItemFlags flags()
  • setFlags(Qt.ItemFlags flags)
3.5.2、项是否选中相关方法

项是否被用户选中可以通过isSelected方法获取,如果要通过代码设置项的选中状态,则调用setSelected方法,相关调用语法如下:

  • bool isSelected()
  • setSelected(bool select)

四、QTableWidget的主要方法

除了从父类继承的方法外,QTableWidget的方法老猿将其归纳为构造方法、部件状态访问方法、项操作方法、项查找和定位方法、表头操作方法五大类。

4.1、构造方法

QTableWidget有2个构造方法:

  • QTableWidget(QWidget parent = None) :创建一个0行0列的QTableWidget实例
  • QTableWidget(int rows, int columns, QWidget parent = None):创建一个rows行columns列的QTableWidget实例

这两个构造方法的区别就是后者指定了部件的行数和列数,而前者行数和列数为0,需要在实例构建后再另外去指定行数和列数。参数parent 一般传部件所在窗口,不传也没关系。

注:

这里的构造方法是沿用C++的说法,Python中的构造方法是__init__。

4.2、部件状态访问方法

老猿将部件中反映部件当前情况的一些方法归类为部件状态访问方法,包括部件的行数、列数、当前项、当前行、当前列等属性访问方法。由于部件行数和列数的访问方法在部件属性中已经介绍了,在此不重复介绍。

4.2.1、当前项访问方法

当前项是指当前鼠标和键盘焦点所在项,在项可以进行选择操作时,当前项可以是选中状态,也可以是未选中状态,选中项也不一定是当前项。与当前项相关的方法包括:

  • QTableWidgetItem currentItem() :返回当前项对应项对象,如果没有当前项则返回None
  • setCurrentItem(QTableWidgetItem item):设置当前项
  • setCurrentItem(QTableWidgetItem item, QItemSelectionModel.SelectionFlags command):设置当前项
  • setCurrentCell(int row, int column):设置当前项
  • setCurrentCell(int row, int column, QItemSelectionModel.SelectionFlags command):设置当前项
注意:
  1. 后面4个方法都是设置当前项,方法名为setCurrentItem的参数是QTableWidgetItem实例,方法名为setCurrentCell的参数是行和列,即这两类方法依据的项定位方法不同
  2. 参数中带command参数的,要求除了将当前项改为参数确认的项之外,还要求有额外的响应,具体响应由command参数确认。关于QItemSelectionModel.SelectionFlags 请参考《PyQt(Python+Qt)学习随笔:Mode/View中的枚举类QItemSelectionModel.SelectionFlag取值及含义》;
  3. 如果当前项没有,则currentItem()方法返回None。
4.2.2、当前行和列访问方法

当前项所在的行和列,既可以通过当前项的QTableWidgetItem实例对象的行号(row()方法)和列号(column()方法)获取,也可以直接通过QTableWidget获取。调用语法如下:

  • int currentColumn()
  • int currentRow()
    如果部件没有当前项,则上述两个方法返回-1。

4.3、部件中的项操作方法

部件中的项操作包括设置项、删除项、编辑项等。

4.3.1、设置项setItem方法

setItem用于在表格部件QTableWidget创建后,设定指定行和指定列的项为一个QTableWidgetItem实例对象。调用语法如下:
setItem(int row, int column, QTableWidgetItem item)

注意:
  • 该方法没有返回值,但会触发itemChanged信号
  • 在使用setItem之前,需要确保表格部件的行数和列数已经设置,且参数 row和column在行数和列数的范围内,否则设置不会成功,这也意味着表格部件的行数和列数不能随着项的增加自动增加,必须预定义好
示例代码:
        for row in range(5):
            for col in range(3):
                item = QtWidgets.QTableWidgetItem(f"({row},{col})" )

                self.tableWidget.setItem(row,col,item)
4.3.2、触发编辑项的editItem方法

QTableWidget提供了触发项编辑的方法,调用语法如下:
editItem(QTableWidgetItem item)

注意:
  • editItem方法生效必须设置项的标记flags为可编辑
  • editItem一次只能触发一个项进行编辑,一旦退出编辑状态(如改变焦点),除非再次调用editItem或设置editTriggers触发编辑或打开永久编辑器否则对应项不能再编辑
  • 连续多次调用editItem,中间没有触发事件处理,则只有第一次调用生效,后续调用无效
4.3.3、openPersistentEditor打开持久编辑器

上面介绍editItem时说明了editItem只能触发一次编辑,可以说进入临时编辑状态,一旦退出编辑除非再通过相关方式触发编辑否则项不可再编辑。与此相对应,与QTreeWidget类似,QTableWidget还提供了一种一旦打开编辑状态就可以随时再次编辑,除非显示关闭编辑状态,这种方式就是打开持久编辑器。调用方法如下:

openPersistentEditor(QTableWidgetItem item)

该方法没有返回值。

4.3.4、从表格中取并移除项的takeItem方法

takeItem方法是从表格部件中取一个项返回并从部件中删除该项,调用语法如下:
QTableWidgetItem takeItem(int row, int column)

4.3.5、项排序

项排序是指针对表格部件中的数据行进行排序,调用语法如下:
sortItems(int column, Qt.SortOrder order = Qt.AscendingOrder)
排序依据参数column指定列进行。Qt.SortOrder为枚举类,有两个常量值,分别为:AscendingOrder升序,对应数值为0,DescendingOrder为降序,对应数值为1。

4.4、部件中项的查找和定位方法

项的查找和定位方法主要是查找特定的项和项的位置属性。

4.4.1、搜索项

在表格部件中,可以根据文本以及匹配模式来搜索满足条件的项,调用语法:
list[QTableWidgetItem] findItems( str text, Qt.MatchFlags flags)

返回值为所有满足条件的项构成的列表,如果没有找到匹配项,返回空列表。
Qt.MatchFlags的取值及含义请参考《PyQt(Python+Qt)学习随笔:Model/View中的枚举类 Qt.MatchFlag的取值及含义》。

4.4.2、访问选中项

在表格部件根据选择模式的设置,只要选择模式不是NoSelection(关于选择模式继承自QAbstractItemView,请参考《PyQt(Python+Qt)学习随笔:QAbstractItemView的selectionMode属性》),则可以通过操作选中部件中的项。选中的项可以通过方法selectedItems()方法返回,其返回值为一个列表,列表中的每个元素是一个选中的QTableWidget项实例。

调用语法:

list[QTableWidgetItem] selectedItems()

4.4.3、获取指定行和列的项

根据行和列可以获取对应位置的项,调用语法如下:
QTableWidgetItem item(int row, int column)

如果对应位置没有项,则返回None。

4.4.4、获取指定位置的项

QTableWidget的itemAt方法通过视口内的坐标点获取对应坐标位置的项,相关调用方法如下:

  • QTreeWidgetItem itemAt( QPoint p)
  • QTreeWidgetItem itemAt(int x, int y)

通过该方法可以获取到视口上对应坐标所在的项,如果对应坐标位置无项则返回None。

4.4.5、获取指定项的行和列

QTableWidget中可以根据项实例去定位项的行和列位置,调用方法如下:

  • int column( QTableWidgetItem item)
  • int row( QTableWidgetItem item)

如果对应项在QTableWidget表格部件中不存在,则返回-1。

4.4.5、获取指定逻辑行或列对应的界面可见行号和列号
4.4.5.1、相关概念

关于逻辑行、列和可见行、列的概念,在QTableWidget中没有介绍,老猿查了比较多的资料,并经过验证,最终才搞清楚相关概念。这里有几个关键点要说明一下:

  1. 逻辑行和逻辑列是指项本身在部件中存储数据的行和列,也是通过QTableWidgetItem项方法row()和column()返回的值
  2. 界面可见行和列是指在部件上的行号和列号,从部件中第一行和第一列数据开始到指定逻辑行或逻辑列在部件内的序号,但隐藏行和列(这里的隐藏包括通过表头方法hideSection实现、数据在视口外、在可以手工调整行和列大小时将其大小调整到最小不可见)也必须参与在内。这个地方是个坑,说是可见行和可见列,但实际上隐藏未展现的和在视口外的数据都是参与行号和列号的计数
  3. 仅当部件中的行或列通过表头的moveSection交换了行或列数据所在的位置时才出现逻辑行列和可见行列不一致的情况
4.4.5.2、可见行和列相关方法

要获取表格部件中的可见行号和列号,调用方法:

  • int visualColumn(int logicalColumn)
  • int visualRow(int logicalRow)
4.4.5.3、小结
  1. 表格部件QTableWidget的项设置方法(setItem)所使用的行和列是项的逻辑行号和列号,表示数据在表格部件的存储位置,表格部件中绝大多数方法所使用的行和列都是逻辑行和列。
  2. 仅当表格部件的表头使用moveSection方法才会导致表格部件的逻辑行列号可能和可见行列号不一致,行和列的隐藏以及超出视口都不会导致逻辑行列号可能和可见行列号不一致;
  3. 由于隐藏数据也在可见行列中计数,因此这儿的可见行列其实是不准确的,visualColumn和visualRow这两个方法在使用上需要注意。
4.4.6、获取项所在矩形位置的visualItemRect方法

QTableWidget的visualItemRect方法返回参数对应项占用视口位置的矩形数据,调用语法如下:
QRect visualItemRect( QTableWidgetItem item)

注意:
1、该方法在item对应项在视口中不可见(即需要滚动才可见)时同样会返回对应的矩形数据,只不过在视口左上角左边或上边的数据对应的横坐标或纵坐标为负数;
2、如果项对应行或列被通过表头方法hideSection隐藏了,则返回的矩形为一个空矩形(无坐标、长宽数据的矩形)。

案例:

在这里插入图片描述
上图中的QTableWidget部件中第一行数据已经通过hideSection进行了隐藏,第1列数据滚动到视口左边外去了,此时输出所有行第一列的可视矩形,输出结果如下:

    (0,0): PyQt5.QtCore.QRect()
    (1,0): PyQt5.QtCore.QRect(-76, 0, 99, 19)
    (2,0): PyQt5.QtCore.QRect(-76, 20, 99, 19)
    (3,0): PyQt5.QtCore.QRect(-76, 40, 99, 19)
    (4,0): PyQt5.QtCore.QRect(-76, 60, 99, 19)
    (5,0): PyQt5.QtCore.QRect(-76, 80, 99, 19)
    (6,0): PyQt5.QtCore.QRect(-76, 100, 99, 19)
    (7,0): PyQt5.QtCore.QRect(-76, 120, 99, 19)

可以看到第一行第一列因为隐藏了是个空矩形,其他行的第一列x坐标都是负数。

4.4.7、返回选中项范围的矩形列表

在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges返回选中矩形的列表,通过方法setRangeSelected将指定矩形范围的项选中或去选中。相关方法调用语法如下:

  • list[QTableWidgetSelectionRange] selectedRanges()
  • setRangeSelected( QTableWidgetSelectionRange range, bool select)
注:
  • QTableWidgetSelectionRange描述一个基于逻辑项位置连续的矩形范围,其矩形范围的左上角坐标为该范围内左上角逻辑项的逻辑行号和列号,右下角为右下角逻辑项的逻辑行号和列号。注意这里是指逻辑项而不是可见项
  • 由于选中的项可能不连续,因此selectedRanges返回的可能是多个QTableWidgetSelectionRange矩形的列表,每个矩形内是一个连续的选中范围

4.5、表头操作方法

QTableWidget表格部件的表头包括水平表头和竖直表头,水平表头每节对应表格的一列,竖直表头对应表格的一行。如图:
在这里插入图片描述
上图中的“行”+编号的项就是竖直表头的一个项(也称为1节),“列”+编号的项就是水平表头的一个项(节)。

4.5.1、设置水平表头的setHorizontalHeaderLabels方法

setHorizontalHeaderLabels用于一次性顺序设置水平表头多个节显示的文本,调用语法如下:

setHorizontalHeaderLabels( Iterable[str] labels)

4.5.2、设置竖直表头的setVerticalHeaderLabels

setVerticalHeaderLabels用于一次性顺序设置竖直表头多个节显示的文本,调用语法如下:
setVerticalHeaderLabels( Iterable[str] labels)

其他的方面与setHorizontalHeaderLabels方法相同。

4.5.3、访问水平节对应项

前面介绍了,表头的一个节实际上对应一个项,项的类型与表格部件的项类型相同,都是QTableWidgetItem实例对象。水平节对应项可以通过方法horizontalHeaderItem和setHorizontalHeaderItem方法访问,调用语法如下:

  • QTableWidgetItem horizontalHeaderItem(int column)
  • setHorizontalHeaderItem(int column, QTableWidgetItem item)
4.5.4、访问竖直节对应项

类似setHorizontalHeaderItem,QTableWidget提供了verticalHeaderItem、setVerticalHeaderItem方法,调用语法如下:

  • QTableWidgetItem verticalHeaderItem(int row)
  • setVerticalHeaderItem(int row, QTableWidgetItem item)

相关方法使用与访问水平节类似,在此不重复说明。

4.5.5、从表头节中取下节对应项

QTableWidget可以取下表头节对应项并返回,相关方法如下:

  • QTableWidgetItem takeHorizontalHeaderItem(int column)
  • QTableWidgetItem takeVerticalHeaderItem(int row)

对应节的项被取下后,表头对应节的标签将自动变更为节的序号。

4.5.6、表头属性相关访问方法

在Designer中,QTableWidget有如下表头属性可以设置:
在这里插入图片描述
相关属性是从QTableView继承过来的,相关访问方法请参考《PyQt(Python+Qt)学习随笔:QTableView的标题表头相关属性》。

五、本节小结

QTableWidget表格部件在创建以后,必须设置其包含的行数和列数才能插入项,项的插入通过setItem()进行。表格部件的QTableWidgetItem项是可用、可编辑、可选择和可选中的,并且可以用作拖放操作的源和拖放目标。项初始化后,可以进行选择、复选、编辑、排序等操作,除排序外相关操作会触发对应信号,可以通过信号来获取操作数据信息。

广告

老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只需要9.9元,该部分与第十五章的内容基本对应,但同样内容在付费专栏上总体来说更详细、案例更多。本节内容对应付费专栏的《第二十三章、 Model/View便利类表格部件QTableWidget详解》。如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

[QT笔记]QTableView、QTableWidget设置表头 QTableView、QTableWidget设置表头 阅读详情

相关推荐

PyQt5桌面GUI开发全解析:从核心原理到项目实战

桌面应用开发是软件工程的重要领域,其核心在于构建用户与系统交互的图形界面。PyQt5作为Python对Qt框架的完整绑定,继承了Qt近30年积累的跨平台能力与丰富组件库,通过信号槽机制实现高效的事件驱动编程。这一技术组合让开发者能够用Python快速构建专业级桌面软件,同时保持与原生C++应用相近的性能表现。在工程实践中,PyQt5特别适合数据处理工具、科学计算平台和工业控制软件的开发,其成熟的生态和稳定的API使其成为众多生产项目的首选。本文深入探讨PyQt5在GUI开发中的核心优势,并解析其与PySid

weixin_30417487的博客 306

PyQt学习随笔:QTableWidget水平表头horizontalHeader、竖直表头verticalHeader的相关操作方法

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget表格部件的表头包括水平表头和竖直表头,水平表头每节对应表格的一列,竖直表头对应表格的一行。如图: 上图中的“行”+编号的项就是竖直表头的一个项(也称为1节),“列”+编号的项就是水平表头的一个项(节)。 1、设置水平表头的setHorizontalHeaderLabel...

老猿Python 2万+

PyQt5入门指南:从环境搭建到界面开发与打包部署

图形用户界面(GUI)是连接用户与程序逻辑的桥梁,其核心在于将复杂的操作封装为直观的交互元素,如按钮和文本框,从而提升软件的易用性和专业性。在Python生态中,PyQt5作为Qt框架的Python绑定,凭借其强大的功能、跨平台特性和与操作系统的深度集成,成为开发专业级桌面应用的首选。它基于信号与槽的通信机制,实现了界面与业务逻辑的高效解耦,并通过布局管理器、丰富的控件库以及样式表(QSS),支持开发者构建规整、美观且响应迅速的界面。对于涉及数据处理或网络请求的耗时任务,PyQt5的多线程支持能有效防止界面

weixin_33766168的博客 354

QTableWidget 设置头标签

要设置QTableWidget的标题,可以通过调用setHorizontalHeaderLabels(const QStringList & labels)来设置。labels中存放的是所有要显示为标题的内容。 Example:本例主要是以实现一个简单的输出窗口为例 //输出窗口头文件代码: #ifndef OUTPUT_H #define OUTPUT_H //#include

祥龙九霄的专栏 2404

PyQt5桌面GUI开发:从信号槽到多线程的Python跨平台实践

桌面GUI开发是软件工程中的重要领域,它涉及创建用户可直接交互的图形界面应用程序。其核心原理在于事件驱动编程模型,通过响应用户输入和系统事件来更新界面状态。在技术价值层面,优秀的GUI框架能显著提升开发效率、增强应用稳定性和跨平台兼容性。Python作为主流编程语言,在数据分析、机器学习等领域广泛应用,而PyQt5正是连接Python生态与专业级桌面开发的关键桥梁。它基于成熟的Qt框架,通过信号与槽机制实现松耦合通信,支持模型/视图架构处理大数据展示,并提供了QThread解决方案来避免界面卡顿。这些特性使

weixin_34277853的博客 558

PyQt5前后端解耦:信号槽、QThread与界面架构实战

在桌面GUI开发中,界面与业务逻辑的耦合是导致项目难以维护、扩展和复用的常见痛点。PyQt5作为Python生态中成熟的GUI框架,提供了信号槽机制与QThread线程模型,可以帮助开发者实现优雅的前后端分离。信号槽替代传统回调,让界面层只负责展示与交互,业务层专注数据处理;QThread配合worker对象,将耗时任务移出主线程,避免界面卡死。这种架构不仅提升代码复用性,也让业务模块能够脱离GUI环境独立测试。从简单的登录校验到批量数据导入,解耦设计都显著降低了需求变更的维护成本。本文以PyQt5实战为例

weixin_34032792的博客 383

Qt Model/View 编程深度解析报告

本文介绍了Qt框架中的Model/View架构,该架构通过分离数据与视图解决了传统GUI开发中的数据冗余和同步问题。文章首先分析了传统基于项控件的局限性,指出其数据耦合导致的维护成本上升。随后阐述了Model/View对MVC模式的改进,合并视图和控制器角色并引入委托机制,形成了Model/View/Delegate范式。 核心内容围绕三大组件展开: 模型作为数据抽象层,通过QAbstractItemModel标准接口统一访问各类数据源,提供QAbstractListModel和QAbstractTable

greenspan的专栏 2180

Qt QTableWidget

下图lineEdit中的数值是好用ms值,我累加的方式是(row+1)*2,就是在原有的行数上+1再翻倍,可以看到在三千万/2的时候,耗时是153毫秒,还算可以,然后是提示错误.不能翻倍为六千万了,如果在ui界面创建的表,没有给单元格赋值,然后直接获取,或报错,这个错我使用try catch() 都没有搞定,所以就是给它初始化。当使用以上方法后,会出现高亮的bug,点击后会高亮遮盖值,这里虽然已经不允许编辑,但是视觉效果还是不好,所以需要再添加。在使用item.text之前,一定是初始化过的。

光顶术士的博客 1万+

PyQt(Python+Qt)学习随笔:Model/View中的枚举类 Qt.MatchFlag的取值及含义

枚举类 Qt.MatchFlag描述在模型中搜索项时可以使用的匹配类型。

老猿Python 6589

老猿Python重难点知识博文汇总

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 除了相关教程外,老猿在学习过程中还写了大量的学习随笔,内容比较杂,文章内容也参差不齐,为了方便,老猿将自己学习过程中遇到的重点和难点知识的一些有价值的文章集中放置在此,供大家参考。 重难点知识汇总目录 MODEL/VIEW相关的知识 按钮、Action类 widget部件及窗口类 ...

老猿Python 1855

Python QT 图书管理系统实战:从 PyQt5 环境搭建到 QTableView 大数据优化与打包分发

桌面应用开发中,Python 结合 QT 框架是快速构建信息管理系统的常见方案。其核心原理在于信号槽机制驱动界面交互,Model/View 架构实现数据与视图分离,数据库事务保证借阅归还等业务操作的原子性。掌握这些基础后,可有效应对表格大数据卡顿、打包后 Qt 插件缺失等工程问题。在课程设计、毕业设计或内部工具交付场景中,基于 PyQt5 或 PySide6 的图书管理系统能完整覆盖增删改查、权限控制与数据持久化需求。本文围绕这类项目的落地路径,拆解环境选型、界面组织、QTableView 自定义 Mode

weixin_29093169的博客 239

PyQt5前后端解耦设计实战:信号槽、Model/View与多线程架构

桌面应用开发中,界面与业务逻辑的分离是保持代码可维护性的核心问题。通过事件驱动架构与信号槽机制,发送方无需关心接收方,数据模型与视图展示各自独立变化,配合线程池处理耗时任务,能够显著降低模块耦合度并提升可测试性。这类设计模式广泛应用于内部工具、数据分析面板等场景,同时也会遇到下拉框闪退、富文本与HTML展示、密码安全填充等典型实现细节。本文以PyQt5为例,从工程结构分层、信号槽连接、Model/View数据管理到QThreadPool多线程封装,系统梳理一套可维护、可扩展的GUI架构实践,帮助开发者避开常

weixin_33933118的博客 375

SPSS回归分析(线性:一元(简单)和多重;非线性logistic)

SPSS线性回归分析回归分析一、线性模型(针对连续因变量,线性关系)(一)简单线性回归(一元线性回归)1、绘制散点图2、建立简单(一元)线性回归模型3、建立模型后,检查预测结果(二)多重回归分析1、绘制矩阵分布散点图(论文专用你懂的)2、建立多重回归模型point 1:自变量加入方法:逐步(步进)法3、建立模型后,检查预测结果二、非线性模型(将非线性问题转换为线性问题)1、logistic分析的回归模型1.1 建立回归模型1.2 利用回归模型进行预测 根据之前的学习,通过评价实验得到了主观数据, 通过 描述

weixin_44394352的博客 5万+

PyQt(Python+Qt)学习随笔:QTableWidgetItem项数据的data和setData访问方法

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget部件中的QTableWidgetItem项数据可以通过项的data( int role) 方法获取项中指定列指定角色的数据,也可以通过setData(int role, QVariant value)方法设置指定角色的数据为value。例如项的文本可以通过data方法和s...

老猿Python 1万+

SPSS(二)SPSS实现多因素方差分析模型(图文教程+数据集)

SPSS(二)SPSS实现多因素方差分析模型 单因素方差分析上一篇博客https://blog.csdn.net/LuYi_WeiLin/article/details/89917656已经介绍完毕 这篇博客我们主要来学习多因素方差分析 多因素方差分析,就是同时考虑若干个控制因素的情况下,分别分析它们的改变是否造成观察变量的显著变动 (多个自变量,一个因变量)自变量类型以分类变量为主也可以...

可乐联盟 6万+

离线反激转换器反馈环路设计:从理论到实践的Type II补偿器详解

在开关电源设计中,反馈环路稳定性是决定电源性能与可靠性的核心。其本质是通过补偿网络对功率级的小信号特性进行校正,以构建一个具有足够相位裕度和增益裕度的闭环系统。反激转换器作为一种广泛应用的隔离拓扑,其功率级在连续导通模式(CCM)和非连续导通模式(DCM)下呈现不同的零极点特性,这直接决定了补偿器的选型。Type II补偿器因其传递函数中固有的积分环节、低频零点与高频极点,恰好能与反激功率级的1P2Z(一个极点、两个零点)特性形成互补,有效塑造理想的回路增益曲线,实现快速稳定的动态响应。本文聚焦于采用TL4

weixin_30162121的博客 501

PyQt(Python+Qt)学习随笔:基于项的项部件(Item Widgets(Item-Based))概述

Model/View架构中的视图部件是基于模型的项视图(Item Views(Model-Based)),要求使用视图的应用必须自己创建模型,管理模型中的数据项,这种方式应用实现起来稍微有点复杂,为此在PyQt和Qt中提供了基于项的项部件(Item Widgets(Item-Based)),包括列表部件(List Widget)、树部件(Tree Widget)、表部件(Table Widget)...

老猿Python 1567

AI Agent在营销领域的实战策略

本文从第一性原理出发,系统性拆解AI Agent在营销领域的落地逻辑、技术架构、实现方案与实战策略。全文覆盖从基础概念到高级优化的全层级知识:底层理论层面推导营销Agent的效用函数与决策框架;技术架构层面提出"感知-记忆-规划-行动-反思"五组件可落地架构;实践层面提供生产级代码实现、多行业案例与ROI提升方法论;前沿层面探讨多Agent协同、世界模型仿真等下一代技术方向。

操作系统内核探秘的博客 227

C++ GUI开发入门:从WiFi列表实战理解Qt框架本质

GUI(图形用户界面)是人机交互的基础技术概念,其核心原理在于将用户操作映射为事件驱动的程序响应,并通过渲染引擎完成像素级输出。C++本身不提供GUI能力,真正的技术价值体现在对底层系统API的高效封装与跨平台抽象能力上,尤其在性能敏感、长期稳定运行的工业HMI、嵌入式工具等场景中不可替代。典型应用如WiFi列表界面开发,需融合平台原生网络接口调用、线程安全模型更新与HiDPI适配等工程实践。本文以Qt框架为切入点,解析C++ GUI从环境配置、信号槽机制到真实项目落地的完整链路,帮助开发者跳出语言误区,建

weixin_33858336的博客 587

Arcgis模型构建器01——写一个简单的模型

在使用模型构建器解决这个需求之前,我们要想清楚如果我们手动解决的话,应该如何去处理,因为构建模型的过程正是基于我们手动处理的过程来构建的。我有一个全国的dem影像数据和一个陕西省边界范围矢量,现在我想获取陕西省的dem影像的坡度数据。填写完之后点击确定,我们发现,两个输入数据和工具连接起来了,并且通过裁剪工具得到一个中间结果,即。我们发现工具框和中间数据框都存在阴影,说明已经运行过了这个模型,不报错就说明模型运行成功!现在我们就把数据和工具都串联起来了,成功构建好了模型。

爱吃雪糕的小布丁的博客 918

高级图像增强——模拟雨天,雾,雪,阳光,阴影,运动模糊,畸变等14种效果,同步扩充标签文件

本文提供了一些高级的,特殊的图像增强方法,具体包括、光。

Limiiiing的博客 1308

QTableWidget表头排序实战:从原理到踩坑全解析

在桌面端表格开发中,数据展示与交互排序是绕不开的基础能力。QTableWidget作为Qt提供的高效表格组件,凭借其Item-Based的便捷封装,成为快速实现数据管理、报表系统等场景的首选。表头排序看似简单,实则涉及数据类型规划、比较规则定制、控件同步与性能优化等多个关键技术点。默认的字符串比较往往导致数字、日期列排序混乱,理解Qt排序执行链路并合理利用UserRole、自定义QTableWidgetItem等机制,才能实现真正可控的排序逻辑。同时,排序开启后带来的行号索引变化、下拉框错位等工程问题,也需

weixin_34267123的博客 363

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

PyQt5桌面应用开发实战:浏览器多开软件列表显示设置功能实现

在桌面应用开发中,数据展示与用户交互是核心环节。通过模型-视图-控制器(MVC)架构,开发者可以将数据逻辑与界面呈现分离,实现灵活可控的界面管理。其技术价值在于提升应用的专业性和用户体验,尤其在需要管理大量并行任务或数据条目的场景下,如自动化测试、多账号操作或系统监控工具。本文以Python PyQt5框架为基础,结合数据绑定与JSON配置持久化,详细解析了如何为自制浏览器多开软件实现可自定义的列表显示设置功能,涵盖列定义、排序规则与视图样式的动态配置,为构建可配置化GUI应用提供了完整的实战方案。

weixin_30751947的博客 377

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

PyQt5从入门到实践系列-19-玩转GUI中的数据库-01

PyQt5从入门到实践系列-19-玩转GUI中的数据库-01

wsyjx201448030108的博客 812

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: PyQt学习随笔:QTableWidget的信号signal简介
下一篇: 第二十三章、 Model/View便利类表格部件QTableWidget详解
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值