Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PySide2 import (QtCore, QtGui, QtWidgets)
- from table_model import CustomTableModel
- class CustomTextEdit(QtWidgets.QPlainTextEdit):
- def __init__(self,parent):
- QtWidgets.QPlainTextEdit.__init__(self, parent)
- self.previous_position = 0 # needed to let the cursor to stand on the end of the string without moving to the next cell.
- def keyPressEvent(self, event):
- #print(event.key)
- QtWidgets.QPlainTextEdit.keyPressEvent(self, event)
- # Check if we are at the end of the text in the current cell.
- if event.key() == QtCore.Qt.Key_Right and self.textCursor().position() == (self.document().characterCount() - 1 ) and self.textCursor().position() == self.previous_position:
- print("Goto next Cell")
- ``
- #print("current row: %s " % self.tableView.selectionModel().currentIndex().row())
- #print("current column: %s " % self.tableView.selectionModel().currentIndex().column())
- self.previous_position = self.textCursor().position()
- #self.msgtext = QtWidgets.QTextEdit(self)
- #self.msgtext.setObjectName('msgtext')
- #self.msgtextplain = self.msgtext.toPlainText()
- #print("CustomTextEdit: ", event.key())
- #print("\t Current Character: ", self.textCursor().position())
- #print("\t Previous Character: ", self.previous_position)
- print(" Total lines: ", self.document().lineCount())
- class TextBoxDelegate(QtWidgets.QItemDelegate):
- def __init__(self):
- QtWidgets.QItemDelegate.__init__(self)
- def sizeHint(self, option, index):
- ''' Adds QSize(0, x) pixels to the bottom of QTextEdit '''
- return (QtWidgets.QItemDelegate.sizeHint(self, option, index) + QtCore.QSize(0, 8))
- #return (QtWidgets.QItemDelegate.sizeHint(self, option, index))
- def createEditor(self, parent, option, index):
- editor = CustomTextEdit(parent)
- #editor = QtWidgets.QTextEdit(parent)
- editor.setVerticalScrollBarPolicy(QtGui.Qt.ScrollBarAlwaysOff)
- editor.setContentsMargins(0, 0, 0, 0)
- #editor.setMinimum(0)
- #editor.setMaximum(100)
- return editor
- def setEditorData(self, textEdit, index):
- value = index.model().data(index, QtCore.Qt.EditRole)
- textEdit.document().setPlainText(value)
- def setModelData(self, textEdit, model, index):
- ''' Placing a paragraph of a text to a cell. If rich text layouyt is needed
- then tetEdit.toHTML should be used '''
- value = textEdit.toPlainText()
- model.setData(index, value, QtCore.Qt.EditRole)
- def updateEditorGeometry(self, editor, option, index):
- editor.setGeometry(option.rect)
- class EditorView(QtWidgets.QTableView):
- ''' Subclassing QTableview for reimplementing keyPressEvent '''
- def keyPressEvent(self, event):
- print(event.key())
- if event.modifiers() == QtCore.Qt.ControlModifier and (event.key() == QtCore.Qt.Key_Return or event.key() == QtCore.Qt.Key_Enter) :
- print('Ctrl+Enter pressed')
- print(self.editor.document().lineCount())
- if event.key() == QtCore.Qt.Key_F1:
- print("Setting forcus to the next cell")
- id = self.model.index(self.selectionModel().currentIndex().row() + 1, self.selectionModel().currentIndex().column())
- self.setCurrentIndex(id)
- if event.modifiers() == QtCore.Qt.ControlModifier and event.key() == QtCore.Qt.Key_Down:
- print("Ctrl + Down pressed")
- # get current row and column:
- print("current row: %s " % self.selectionModel().currentIndex().row())
- print("current column: %s " % self.selectionModel().currentIndex().column())
- if event.modifiers() == QtCore.Qt.ControlModifier and event.key() == QtCore.Qt.Key_Up:
- print("Ctrl + Up pressed")
- def __init__(self, source_data = None, translated_data = None):
- QtWidgets.QTableView.__init__(self)
- self.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)
- self.setEditTriggers(QtWidgets.QAbstractItemView.AllEditTriggers)
- # CustomTableModel
- self.model = CustomTableModel(source_data, translated_data)
- self.setModel(self.model)
- self.setEditTriggers(QtWidgets.QAbstractItemView.AllEditTriggers)
- class Widget(QtWidgets.QWidget):
- def __init__(self, source_data = None, translated_data = None):
- QtWidgets.QWidget.__init__(self)
- # Creating QTableView
- self.tableView = EditorView(source_data, translated_data)
- #print(self.tableView.contentsMargins())
- #self.tableView.setModel(self.model)
- #self.tableView.setEditTriggers(QtWidgets.QAbstractItemView.AllEditTriggers)
- delegate = TextBoxDelegate()
- self.tableView.setItemDelegate(delegate)
- self.size()
- # QTableHeaders
- self.horizontal_header = self.tableView.horizontalHeader()
- self.horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
- self.horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch)
- self.vertical_header = self.tableView.verticalHeader()
- #self.horizontal_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
- self.vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
- #self.horizontal_header.setStretchLastSection(True)
- self.horizontal_header.setVisible(False)
- self.tableView.resizeRowsToContents()
- # QWidget Layout
- self.main_layout = QtWidgets.QHBoxLayout()
- size = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
- size.setHorizontalStretch(1)
- self.tableView.setSizePolicy(size)
- self.main_layout.addWidget(self.tableView)
- # Set Layout to the QWidget
- self.setLayout(self.main_layout)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement