Code: Alles auswählen
import operator # used for sorting
from PyQt4.QtCore import Qt, QAbstractTableModel, SIGNAL, pyqtSignal
from PyQt4.QtGui import QWidget, QTableView, QApplication, QVBoxLayout, QTreeView, QKeyEvent
class MyTreeView(QTreeView):
enterPressed = pyqtSignal()
def __init__(self):
QTreeView.__init__(self)
def keyPressEvent(self, event): #QKeyEvent
if event.key() == Qt.Key_Enter:
self.enterPressed.emit()
print('enter key pressed')
class MyWindow(QWidget):
def __init__(self, dataList, header, *args):
QWidget.__init__(self, *args)
self.filter = MyTreeView()
self.installEventFilter(self.filter)
MyTreeView.keyPressEvent(QKeyEvent()) #<<<<<<<<<< Fehlermeldung
# setGeometry(x_pos, y_pos, width, height)
self.setGeometry(70, 150, 420, 250)
self.setWindowTitle("Click on the header to sort table")
self.table_model = MyTableModel(self, dataList, header)
table_view = QTableView()
# bind cell click to a method reference
table_view.clicked.connect(self.showSelection)
table_view.setModel(self.table_model)
# enable sorting
table_view.setSortingEnabled(True)
layout = QVBoxLayout(self)
layout.addWidget(table_view)
self.setLayout(layout)
def showSelection(self, item):
# Hole Liste
mylist = self.table_model.sorted_list()
# Ausgabe des ausgewählten Datensatzes
dataset = mylist[item.row()]
# Editiere Datensatz
dataset = list(dataset) # Test
dataset[0] = 'aaa test' # Test
dataset = tuple(dataset) # Test
# Update Liste
mylist[item.row()] = dataset
self.table_model.edit_list(mylist)
#
cellContent = item.data()
print(cellContent) # test
sf = "You clicked on {}".format(cellContent)
# display in title bar for convenience
self.setWindowTitle(sf)
class MyTableModel(QAbstractTableModel):
"""
keep the method names
they are an integral part of the model
"""
def __init__(self, parent, mylist, header, *args):
QAbstractTableModel.__init__(self, parent, *args)
self.mylist = mylist
self.header = header
def rowCount(self, parent):
return len(self.mylist)
def columnCount(self, parent):
return len(self.mylist[0])
def data(self, index, role):
if not index.isValid():
return None
elif role != Qt.DisplayRole:
return None
return self.mylist[index.row()][index.column()]
def headerData(self, col, orientation, role):
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return self.header[col]
return None
def sort(self, col, order):
"""sort table by given column number col"""
self.emit(SIGNAL("layoutAboutToBeChanged()"))
self.mylist = sorted(self.mylist,
key=operator.itemgetter(col))
if order == Qt.DescendingOrder:
self.mylist.reverse()
self.emit(SIGNAL("layoutChanged()"))
def sorted_list(self):
return self.mylist
def edit_list(self, mylist):
self.mylist = mylist
return
# you could process a CSV file to create this data
header = ['First Name', 'Last Name', 'Age', 'Weight']
# a list of (fname, lname, age, weight) tuples
dataList = [
('Ben', 'Dover', 36, 127),
('Foster', 'Krampf', 27, 234),
('Barry', 'Chaurus', 19, 315),
('Sede', 'Anowski', 59, 147),
('Carolus', 'Gabel', 94, 102),
('Michel', 'Zittus', 21, 175),
('Annie', 'Waters', 31, 114)
]
app = QApplication([])
win = MyWindow(dataList, header)
win.show()
result = app.exec_()
print(result)
Code: Alles auswählen
Traceback (most recent call last):
File "table_test.py", line 132, in <module>
win = MyWindow(dataList, header)
File "table_test.py", line 32, in __init__
MyTreeView.keyPressEvent(QKeyEvent()) #<<<<<<<<<< Fehlermeldung
TypeError: arguments did not match any overloaded call:
QKeyEvent(QEvent.Type, int, Qt.KeyboardModifiers, str text='', bool autorep=False, int count=1): not enough arguments
QKeyEvent(QKeyEvent): not enough arguments
Code: Alles auswählen
MyTreeView.keyPressEvent(QKeyEvent()) #<<<<<<<<<< Fehlermeldung