ich möchte, dass gleich nach dem Starten des Fensters (Tabellenausgabe), der Focus auf die erste Zeile der Tabelle gesetzt wird, ohne Betätigen der Maus bzw. Tastatur.
Trotz intensivem Googeln, habe ich keine Lösung gefunden.
Ich hoffe Ihr könnt mir dabei weiterhelfen!
Ich habe dazu hier einen lauffähigen Code, den Ihr dazu verwenden könnt, um mir zu helfen.
Grüße Nobuddy
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# For Python3.x
import sys
import operator # used for sorting
from PyQt5 import QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtWidgets import (QMainWindow, QMdiArea, QWidget, QTableView,
QAbstractItemView, QGridLayout, QApplication)
title = 'Backlight management'
header = ['Pos', 'Supplier', 'Artikel', 'Benennung']
table = [['001', 'Meyer', '47110', 'Bratwurst weiss, 125 g / Stück, 50% Schweinefleisch, 50% Rindfleisch'],
['002', 'Meyer', '47110', 'Bratwurst weiss, 125 g / Stück, 50% Schweinefleisch, 50% Rindfleisch'],
['003', 'Meyer', '47110', 'Bratwurst weiss, 125 g / Stück, 50% Schweinefleisch, 50% Rindfleisch']]
columnWidths = [20, 30, 40, 400]
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle("MDI demo")
self.mdi_area = QMdiArea()
self.setCentralWidget(self.mdi_area)
self.mdi_area.tileSubWindows()
title = 'TEST'
self.list_model = 'listinlist'
sub = Table(self, title, table, header, columnWidths)
self.mdi_area.addSubWindow(sub)
sub.show()
class Table(QWidget):
def __init__(self, parent, title, dataList, header, columnWidths):
QWidget.__init__(self)
self.parent = parent
self.title = title
self.old_data = self.mylist = self.dataList = sorted(dataList)
self.header = header
self.columnWidths = columnWidths
self.mdi_area = parent.mdi_area
self.setWindowTitle(self.title)
self.old_data_counter = len(self.dataList)
if self.old_data_counter == 0:
print('Keine Daten vorhanden!')
return
self.installEventFilter(self)
self.view = QTableView()
self.model = TableModel(self, self.dataList, self.header)
self.update_table()
self.headerSize(parent)
# GridLayout
grid = QGridLayout()
grid.addWidget(self.view, 0, 0)
self.setLayout(grid)
def updateGeometryAsync(self):
QtCore.QTimer.singleShot(0, self.updateGeometry)
def headerSize(self, parent):
"""
Build header- and columnsize
"""
view = self.view
model = self.model
view.setModel(model)
view.resizeColumnsToContents()
view.resizeRowsToContents()
view.setWordWrap(True)
def update_table(self):
# ... when a row header label changes and makes the
# width of the vertical header change too
self.model.headerDataChanged.connect(self.updateGeometryAsync)
self.view.setModel(self.model)
# enable sorting
self.view.setSortingEnabled(True)
self.view.setSelectionBehavior(QAbstractItemView.SelectRows)
self.old_data_counter = len(self.mylist)
self.mdi_area.adjustSize()
class TableModel(QtCore.QAbstractTableModel):
"""
Build table
"""
def __init__(self, parent, mylist, header, *args):
QtCore.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() or role != QtCore.Qt.DisplayRole:
return None
return self.mylist[index.row()][index.column()]
def headerData(self, col, orientation, role):
if (orientation == QtCore.Qt.Horizontal
and role == QtCore.Qt.DisplayRole):
return self.header[col]
return None
def sort(self, col, order):
"""
Sort table by given column number col
"""
self.layoutAboutToBeChanged.emit()
self.mylist = sorted(self.mylist,
key=operator.itemgetter(col))
if order == QtCore.Qt.DescendingOrder:
self.mylist #.reverse()
self.layoutChanged.emit()
def output_list(self):
return self.mylist
def main():
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()