当时写这个地方的时候需要在一定条件下把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...