首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >突出显示QTableWidget PyQt5中的单元格

突出显示QTableWidget PyQt5中的单元格
EN

Stack Overflow用户
提问于 2017-11-29 06:09:32
回答 2查看 4.4K关注 0票数 1

我有一个pyqt5 QTableWidget,我想突出表中的一个特定单元格

例如,我给出了第2行和第2列,我希望该单元格被突出显示为编辑,我指的是蓝色的元素。

我的桌子

代码语言:javascript
运行
复制
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)

在该方法中,转到我希望突出显示单元格的位置。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-29 06:25:15

如果要从QTableWidget中选择项,必须使用setRangeSelected方法,这需要选择的范围(在您的情况下是相应的行和列),那么我将给出一个示例:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2019-03-01 21:11:04

如果需要高亮显示单个单元格,我发现使用setItemSelected()方法更方便:您所要做的就是传递项并设置布尔值(不需要QTableWidgetSelectionRange和和弦)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47546162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档