在QTableWidget中编辑单元格时不显示旧值

时间:2016-09-08 09:53:58

标签: python qt pyqt qtablewidget

我有一个基本的QTableWidget,用这个python代码创建:

from silx.gui import qt
app = qt.QApplication([])
qtw = qt.QTableWidget()
qtw.show()
qtw.setColumnCount(8)
qtw.setRowCount(7)
app.exec_()

from silx.gui import qt行只是一个包装器,它找出已安装的qt包装器(PyQt4,PyQt5或PySide)并展平qt命名空间。

当我编辑单元格时,结果表有一个奇怪的行为:正如预期的那样,当我双击单元格时,旧文本被高亮显示,但不寻常的行为是旧文本仍然可见,新文本与我正在输入它,直到我按下回车或我点击另一个单元格。

我希望一旦我开始输入新文本,旧文本就会消失。我知道这是可能的,因为我有一个程序示例,它具有qTableWidget,具有我想要的行为。

但是我找不到该程序中的细胞编辑行为被改变的地方。我怎么能这样做?

覆盖“垃圾邮件”和“鸡蛋”的示例。

[example of "spam" and "eggs" overlayed[1]

编辑:没有包装器业务的代码示例

from PyQt5.Qt import QApplication, QTableWidget, qVersion
app =QApplication([])
print(qVersion())
qtw = QTableWidget()
qtw.show()
qtw.setColumnCount(8)
qtw.setRowCount(7)
app.exec_()

使用PyQt4,使用此导入(也删除print(qVersion())行):

from PyQt4.QtGui import QApplication, QTableWidget

4 个答案:

答案 0 :(得分:1)

我的方法:

class MyDelegate(QItemDelegate):

    def setEditorData(self,editor,index):
        editor.setAutoFillBackground(True)
        editor.setText(index.data().toString())

答案 1 :(得分:1)

就我而言,当我将QWidgetTable的背景颜色设置为透明时,会出现上述问题。当我删除该设置时,不再有旧数据覆盖新的数据。 希望它有所帮助。

答案 2 :(得分:0)

您可以尝试将QTableWidget cellClicked(int row, int column)发出的信号与为清除条目而创建的插槽连接。
http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html#connecting-disconnecting-and-emitting-signals

答案 3 :(得分:0)

通常,编辑行为是通过QItemDelegates控制的。通常,这样做是为了在进行编辑时提供更高级的编辑,或过滤输入数据或执行某些副作用(如更新数据库)。但您也可以使用它来清除编辑时呈现给用户的编辑器。

class MyDelegate(QItemDelegate):

    def setEditorData(self, editor, index):
        # Normally, this would set the text of the editor to the current
        # value of the cell.  If you do nothing here, it will be blank.
        editor.clear()

qtw = QTableWidget()
delegate = MyDelegate(qtw)
qtw.setItemDelegate(delegate)