我有一个基本的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,具有我想要的行为。
但是我找不到该程序中的细胞编辑行为被改变的地方。我怎么能这样做?
覆盖“垃圾邮件”和“鸡蛋”的示例。
[
编辑:没有包装器业务的代码示例
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
答案 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)