2 回答
TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
默認(rèn)情況下,掃描儀發(fā)送一個(gè)結(jié)束行(“\n”),它被翻譯成 Return 或 Enter 鍵,這默認(rèn)關(guān)閉編輯器,在這種情況下必須攔截該事件,移動(dòng)光標(biāo)并打開編輯器:
import sys
from PyQt5 import QtCore, QtWidgets
class TableWidget(QtWidgets.QTableWidget):
def keyPressEvent(self, event):
if (
event.key() in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return)
and self.state() == QtWidgets.QAbstractItemView.EditingState
):
index = self.moveCursor(
QtWidgets.QAbstractItemView.MoveNext, QtCore.Qt.NoModifier
)
self.selectionModel().setCurrentIndex(
index, QtCore.QItemSelectionModel.ClearAndSelect
)
self.edit(index)
else:
super().keyPressEvent(event)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.tableWidget = TableWidget(4, 2)
self.setCentralWidget(self.tableWidget)
self.tableWidget.horizontalHeader().setStretchLastSection(True)
self.tableWidget.horizontalHeader().setSectionResizeMode(
QtWidgets.QHeaderView.Stretch
)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以將表子類化并覆蓋closeEditor():hint參數(shù)告訴視圖當(dāng)編輯器關(guān)閉時(shí)應(yīng)該發(fā)生什么;默認(rèn)情況下,當(dāng)按下Enter當(dāng)前單元格數(shù)據(jù)時(shí)提交,但您可以像這樣覆蓋此行為:
from PyQt5 import QtGui, QtWidgets
class Table(QtWidgets.QTableView):
? ? # leave to False for the default behavior (the next cell is the one at the
? ? # right of the current, or the first of the next row; when set to True it
? ? # will always go to the next row, while keeping the same column
? ? useNextRow = False
? ? def closeEditor(self, editor, hint):
? ? ? ? if hint == QtWidgets.QAbstractItemDelegate.SubmitModelCache:
? ? ? ? ? ? if self.useNextRow:
? ? ? ? ? ? ? ? super().closeEditor(editor, hint)
? ? ? ? ? ? ? ? current = self.currentIndex()
? ? ? ? ? ? ? ? newIndex = current.sibling(current.row() + 1, current.column())
? ? ? ? ? ? ? ? if newIndex.isValid():
? ? ? ? ? ? ? ? ? ? self.setCurrentIndex(newIndex)
? ? ? ? ? ? ? ? ? ? self.edit(newIndex)
? ? ? ? ? ? ? ? return
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? hint = QtWidgets.QAbstractItemDelegate.EditNextItem
? ? ? ? super().closeEditor(editor, hint)
if __name__ == '__main__':
? ? import sys
? ? app = QtWidgets.QApplication(sys.argv)
? ? test = Table()
? ? test.show()
? ? model = QtGui.QStandardItemModel(10, 5)
? ? test.setModel(model)
? ? sys.exit(app.exec_())
添加回答
舉報(bào)
