添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

当时写这个地方的时候需要在一定条件下把QtWidgets表格的一部分单元格设为不可编辑,在一定条件下又把它们设为可编辑,给我恶心坏了,PyQT的QtWidgets真是反人类的设计。
需要先定义一个有某种特征的QTableWidgetItem,然后将其放到需要修改特征的QtWidgets的单元格上去,要设定QTableWidgetItem的特征还必须修改ItemIsEnabled项。

已经忘了当时是怎么写出来的了,查了文档也查了许多博客,回顾记录一下。

假设已经定义好了ui.tableWidget和i,j,若需要设置单元格(i, j)为 不可编辑 ,则应为:

from PyQt5 import QtWidgets, QtCore
item1 = QtWidgets.QTableWidgetItem()
item1.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
ui.tableWidget.setItem(i, j, item1)

更神奇的来了,恢复单元格(i,j)的默认设置,或者用于设置单元格(i, j)可编辑,应为:

from PyQt5 import QtWidgets, QtCore
item2 = QtWidgets.QTableWidgetItem()
item2.setFlags(QtCore.Qt.ItemFlag(63))
ui.tableWidget.setItem(i, j, item2)

这里写的这么些Flag我试了个遍基本上,才算是找出来怎样设为不可编辑。

为什么非得这样不可呢

为什么非得这样不可呢,我们看一下文档就知道,QTableWidget类里其实是有item()函数的,返回值正是QTableWidgetItem类,而QTableWidgetItem类里是能够setFlags()的,setFlags()函数我们上面也用到了。
按理说这么一路调用下来就足以设置单元格的各种性质了,然而文档对item()函数的描述为:

Returns the item for the given row and column if one has been set; otherwise returns nullptr.

也就是说QTableWidget里面的单元格默认是没有set过的,我们无法对一个没有set过的单元格调用item()函数。

离谱就离谱在这里了。

所以我们只能凭空创造一个QTableWidgetItem出来,设置好各种性质,然后填充到QTableWidget的特定位置里面去。

还有一个相似问题是,QtWidgets如果我需要检查(i, j)位置上有没有被录入字符,需要这样判断:

if ui.tableWidget.item(i, j) and ui.tableWidget.item(i, j).text()!='':
	...

而不能直接判断 if ui.tableWidget.item(i, j).text()!=’’
这个问题同样的原因也能解释,没set过的单元格连text()函数都不能调用,否则会报错,而tableWidget.item()需要用来判断单元格是否set过了!!!

总结起来就是QtWidgets对单元格的初始化真的离谱。

PyQt5中的QWidget是一个重要的GUI组件,它提供了创建和管理用户界面的基本功能。QWidget可以用作容器,用于组织和布局其他GUI元素,还可以处理用户交互事件和绘图操作。通过继承QWidget,开发人员可以创建自定义的GUI组件,并且可以利用QWidget的样式表和透明窗口功能来定制界面外观。总而言之,QWidget是构建功能丰富、交互性强的PyQt5图形用户界面的核心组件之一。 本文部分转自:http://blog.csdn.net/sinat_27593959/article/details/53048614?locationNum=3&fps=1 通过QTableWidget中的item( )方法可以获得相应行数和列数的QTableWidgetItem,若要设置该Item的编辑状态(即可编辑状态和不可编辑状态),可以通过QTableWidgetIte python 设置QtreeWidget单列可编辑 代码作用:双击QtreeWidgetItem后判断被点击的Item所处列,处于第2列则设置Item可编辑,处于其它列则不可编辑。 self.treeWidgetProgram.itemDoubleClicked.connect(self.setEditable) def setEditable(self, item, column): if(column == 1): item.setFlags(item.fla from PyQt5.QtWidgets import QMainWindow, QTableWidgetItem, QComboBox, QMessageBox, QMenu, QAction, QHeaderView, QAbstractItemView self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) 所有的flags都是Qt.ItemFlags()对象,值为整数值。刚开始使用setFlags()这个命令时,单独使用setFlags(Qt.ItemIsEditable)会发现和内容描述的功能是相反的,如果要开启该功能,需要加上Qt.ItenIsEnabled,即使用setFlags(Qt.ItemIsEditable | Qt.ItenIsEnabled)才... PyQt5最全92 窗口之setWindowFlags设置窗口样式 from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import sys class WindowPattern(QMainWindow): 设置窗口样式(主要是窗口边框、标题栏和窗口本身的样式) def __init__(self): super(Windo 2、设置某行或者某列不可编辑,其他行列可编辑 1)继承类QStyledItemDelegate,重写函数createEditor,让其返回空,(单元较多时推荐使用) QWidget* ReadOnlyItemDelegate::createEditor(QWidget* parent, const QStyleOpti QStringListheader; header.append(QString::fromLocal8Bit("姓名")); header.append(QString::fromLocal8Bit("成绩")); this->setHor...