Re: Scallierung von QtWidgets
Verfasst: Mittwoch 28. Juni 2017, 12:02
QTableView, habe ich im Designer auch schon mal in der Hand gehabt, da habe ich aber noch keine Ahnung wie das umgesetzt wird.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
from PyQt4.QtCore import Qt, QAbstractTableModel, SIGNAL
from PyQt4.QtGui import QWidget, QTableView, QApplication, QVBoxLayout
Code: Alles auswählen
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class menudemo(QMainWindow):
def __init__(self, parent = None):
super(menudemo, self).__init__(parent)
layout = QHBoxLayout()
bar = self.menuBar()
file = bar.addMenu("File")
file.addAction("New")
save = QAction("Save",self)
save.setShortcut("Ctrl+S")
file.addAction(save)
edit = file.addMenu("Edit")
edit.addAction("copy")
edit.addAction("paste")
quit = QAction("Quit",self)
file.addAction(quit)
file.triggered[QAction].connect(self.processtrigger)
self.setLayout(layout)
self.setWindowTitle("menu demo")
def processtrigger(self,q):
print(q.text()+" is triggered")
def main():
app = QApplication(sys.argv)
ex = menudemo()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Code: Alles auswählen
# bind cell click to a method reference
table_view.clicked.connect(self.showSelection)
Code: Alles auswählen
def showSelection(self, item):
mylist = self.table_model.sorted_list()
dataset = mylist[item.row()]
print(dataset) # test
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
Code: Alles auswählen
# 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([])
filter = MyTreeView()
app.installEventFilter(filter)
win = MyWindow(dataList, header)
win.show()
result = app.exec_()
Code: Alles auswählen
MyTreeView.keyPressEvent(self, QKeyEvent)