在 QTableWidget PyQt5 中突出显示单元格
Posted
技术标签:
【中文标题】在 QTableWidget PyQt5 中突出显示单元格【英文标题】:Highlight Cell in a QTableWidget PyQt5 【发布时间】:2017-11-29 06:09:32 【问题描述】:我有一个 pyqt5 QTableWidget,我想突出显示表格的特定单元格
例如,我给出第 2 行和第 2 列,我希望该单元格突出显示以进行编辑,我的意思是蓝色元素
我的桌子
def createTable(self):
# Create table
self.tableWidget = QTableWidget()
self.tableWidget.setRowCount(4096)
self.tableWidget.setColumnCount(16)
horizantalLabels = []
verticalLabels = []
for i in range(16):
horizantalLabels.append(funciones.tohex(i,8))
for i in range(4096):
verticalLabels.append(funciones.tohex(i*16,16))
self.tableWidget.setHorizontalHeaderLabels(horizantalLabels)
self.tableWidget.setVerticalHeaderLabels(verticalLabels)
# table selection change6
for i in range(4096):
for j in range(16):
self.tableWidget.setItem(i, j, QTableWidgetItem("00"))
self.tableWidget.setColumnWidth(j, 29)
self.tableWidget.setItemDelegate(HexDelegate())
self.tableWidget.cellChanged.connect(self.changed)
def goToPosition(self):
position = self.goTo.text()
self.tableWidget.scrollToBottom()
#print(position)
lenght = len(position)
if lenght > 3:
position_Row = position[:3]
position_Column = position[3:]
print(position_Row)
print(position_Column)
position_Row = int(position_Row, 16)
position_Column = int(position_Column,16)
print("row " + str(position_Row))
positionCell = self.tableWidget.item(position_Row, position_Column)
self.tableWidget.scrollToItem(positionCell)
在方法中,转到我要突出显示单元格的位置
【问题讨论】:
显示你试过的代码 这是代码的一部分,我没有全部展示,因为它很大 你要全部吗? 我建议您阅读以下内容来改善您的问题:How to Ask 【参考方案1】:如果你想从QTableWidget
中选择项目,你必须使用setRangeSelected
方法,这要求选择的范围,在你的情况下是相应的行和列,然后我举一个例子:
class Widget(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
hlayout = QHBoxLayout()
self.rbox = QSpinBox(self)
self.cbox = QSpinBox(self)
hlayout.addWidget(self.rbox)
hlayout.addWidget(self.cbox)
vlayout = QVBoxLayout(self)
vlayout.addLayout(hlayout)
nrows = 5
ncols = 5
self.rbox.setMaximum(nrows-1)
self.cbox.setMaximum(ncols-1)
self.table = QTableWidget(nrows, ncols, self)
vlayout.addWidget(self.table)
for r in range(nrows):
for c in range(nrows):
it = QTableWidgetItem("-".format(r, c))
self.table.setItem(r, c, it)
self.rbox.valueChanged.connect(self.selectItem)
self.cbox.valueChanged.connect(self.selectItem)
self.selectItem()
def selectItem(self):
self.table.clearSelection()
x = self.rbox.value()
y = self.cbox.value()
self.table.setRangeSelected(QTableWidgetSelectionRange(x, y, x, y), True)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
【讨论】:
【参考方案2】:我发现使用 setItemSelected() 方法更方便,如果您需要突出显示单个单元格:您所要做的就是传入项目并设置布尔值(不需要 QTableWidgetSelectionRange 和坐标)。
【讨论】:
以上是关于在 QTableWidget PyQt5 中突出显示单元格的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PyQt5 中捕获 QTableWidget 上的左右鼠标单击事件?
从 PyQt5 中的 QTableWidget 中删除单元格填充
如何在 PyQt5 QTableWidget 中获取选定索引中的项目总和
PyQt5 QTableWidget:右键选择列,并在上下文菜单中显示删除条目