Установка флага Qt.ItemIsEnabled
делает QTableView
элементы доступными для редактирования. Чтобы войти в режим редактирования элемента, пользователь может просто дважды щелкнуть по нему. Другой способ отредактировать элемент - выбрать его и нажать клавишу на клавиатуре. Как отключить второй способ входа в режим редактирования элемента?
Вот изображение, показывающее QTableView с выбранным элементом:
Как только пользователь нажимает клавишу на клавиатуре, выбранный элемент уже находится в режиме редактирования:
Такое поведение QTableView по умолчанию делает невозможным определение ярлыков функций, так как вместо запуска функции привязки к ярлыку элемент QListView переходит в режим редактирования .... Как заставить QTableView переходить в режим редактирования только по двойному щелчку?
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
class Model(QAbstractTableModel):
def __init__(self, parent=None, *args):
QAbstractTableModel.__init__(self, parent, *args)
self.items = ['Item_A_001','Item_A_002','Item_B_001','Item_B_002']
def rowCount(self, parent=QModelIndex()):
return len(self.items)
def columnCount(self, parent=QModelIndex()):
return 1
def data(self, index, role):
if not index.isValid(): return QVariant()
elif role != Qt.DisplayRole:
return QVariant()
row=index.row()
if row<len(self.items):
return QVariant(self.items[row])
else:
return QVariant()
def flags(self, index):
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
tableModel=Model(self)
self.view=QTableView(self)
self.view.setModel(tableModel)
self.view.horizontalHeader().setResizeMode(QHeaderView.Stretch)
layout = QVBoxLayout(self)
layout.addWidget(self.view)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())