Ich möchte in meiner Dataset-Tabelle, die Item-Position bei FocusIn ermitteln.
Über den eventFilter und QtCore.Qt.StrongFocus habe ich versucht, dies zu bewältigen, komme da auf keinen grünen Zweig.
Ich hoffe, dass Ihr mir dabei helfen könnt, was ich falsch mache bzw. wie es richtig geht.
Meinen Code entsprechend gekürzt, so dass er für Euch lauffähig ist.
Code: Alles auswählen
import os
import sys
import operator # used for sorting
from PyQt4 import QtCore, QtGui
title = 'Backlight management'
header = ['Pos', 'Supplier', 'Artikel', 'Benennung']
dataset = ['001', 'Meyer', '47110', 'Bratwurst weiss, 125 g / Stück, 50% Schweinefleisch, 50% Rindfleisch']
columnWidths = [20, 15, 20, 40]
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle("MDI demo")
self.mdi_area = QtGui.QMdiArea()
self.setCentralWidget(self.mdi_area)
sub = Dataset(title, dataset, header, columnWidths)
sub.setWindowTitle(title)
self.mdi_area.addSubWindow(sub)
sub.show()
class Dataset(QtGui.QWidget):
def __init__(self, title, dataset, header, width):
super(Dataset, self).__init__()
self.setWindowTitle(title)
self.old_dataset = self.dataset = dataset
self.header = header
self.width = width
self.setObjectName('DATASET')
self.installEventFilter(self)
self.setFocusPolicy(QtCore.Qt.StrongFocus)
self.view = QtGui.QTableView(self)
# GridLayout
grid = QtGui.QGridLayout()
grid.addWidget(self.view, 0, 0)
self.setLayout(grid)
self.model = QtGui.QStandardItemModel(self)
# Load dataset
[self.model.invisibleRootItem().appendRow(
QtGui.QStandardItem(column)) for column in self.dataset]
# Vertical header
[self.model.setHeaderData(i, QtCore.Qt.Vertical, column)
for i, column in enumerate(header)]
self.proxy = QtGui.QSortFilterProxyModel(self)
self.proxy.setSourceModel(self.model)
self.view.setModel(self.proxy)
def eventFilter(self, widget, event):
"""
View events and check for tasks
"""
if event.type() == QtCore.QEvent.FocusIn:
try:
if self.focusin != (widget, event):
self.focusin = widget, event
except AttributeError:
self.focusin = widget, event
for i in range(len(self.header)):
item = QtGui.QStandardItem(i)
return True
return QtGui.QWidget.eventFilter(self, widget, event)
def closeEvent(self, event):
self.exec_()
event.ignore()
event.accept()
def exec_(self):
self.dataset = [self.model.invisibleRootItem().child(i).text()
for i in range(len(self.header))]
print('self.dataset', self.dataset)
def main():
app = QtGui.QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()