ich möchte Focus und Cursor automatisch in ein Datenfeld setzen, wenn das Datenfeld folgender Wert beinhaltet "<?>".
Folgender Code, habe ich zum Testen:
Code: Alles auswählen
import sys
import operator # used for sorting
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import (Qt, QSize, QEvent, pyqtSignal, QObject,
QSortFilterProxyModel)
from PyQt5.QtGui import QStandardItem, QStandardItemModel, QCloseEvent, QKeySequence
from PyQt5.QtWidgets import (QMainWindow, QMdiArea, QWidget, QMessageBox,
QTableView, QGridLayout, QApplication, QShortcut, qApp,
QStyledItemDelegate, QCompleter, QLineEdit, QHBoxLayout)
title = 'Backlight management'
header = ['Pos', 'Supplier', 'Artikel', 'Benennung']
dataset = ['001', '<?>', '<?>', 'Bratwurst weiss, 125 g / Stück, 50% Schweinefleisch, 50% Rindfleisch']
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle("MDI demo")
self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
self.mdi.pool2dict = {}
sub = Dataset(self, dataset, header)
self.mdi.addSubWindow(sub)
sub.show()
class Dataset(QWidget):
def __init__(self, parent, dataset, header):
super(Dataset, self).__init__()
self.parent = parent
try:
self.listname = parent.listname
except AttributeError:
# Testing, not listname.
pass
self.mdi = parent.mdi
self.dataset = dataset
self.header = header
self.setObjectName('DATASET')
self.installEventFilter(self)
self.setFocusPolicy(Qt.StrongFocus)
self.view_dataset = QTableView(self)
# GridLayout
grid = QGridLayout()
grid.addWidget(self.view_dataset, 0, 0)
self.setLayout(grid)
self.model_dataset = QStandardItemModel(self)
# Vertical header
[self.model_dataset.setHeaderData(i, Qt.Vertical, column)
for i, column in enumerate(header)]
# Load dataset
[self.model_dataset.invisibleRootItem().appendRow(
QStandardItem(column)) for column in self.dataset]
self.proxy = QSortFilterProxyModel(self)
self.proxy.setSourceModel(self.model_dataset)
self.view_dataset.setModel(self.proxy)
self.new()
def new(self):
self.dataset = [self.model_dataset.invisibleRootItem().child(i).text()
for i in range(len(self.header))]
for i in range(len(self.header)):
value = self.dataset[i]
self.model_dataset.item(i, 0).setText(value)
error_sign = '<?>'
if set((error_sign,)) & set(self.dataset):
for value in self.dataset:
if value == error_sign:
print('Eingabefeld muss ausgefüllt werden!')
# Setze Focus und Cursor in betreffendes Eingabefeld.
# ??????
return
def main():
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Leider bin ich da total übefordert und kann dies selbst nicht umsetzen, daher hoffe ich auf Eure Hilfe!
Grüße Nobuddy