Seite 1 von 1

Daten aus anderer class lesen...

Verfasst: Montag 1. Juni 2020, 11:14
von steenhy
Hallo,
ich weiß, ich soll erst die 5 dicken Bücher über objektorientierte Programmierung lesen....

Ich habe eine class "Hauptfenster" und eine class "Tab_Window".
In dem Tab_Window sind in verschiedenen Tabs Tabellenblätter (QTableWidget). Eines heißt self.Tabelle1.
Jetzt soll im Hauptfenster im Menu über Punkt Auswertung das Auslesen der Tabelle1 gestartet werden.
Dabei soll die Tabelle durchlaufen werden, um die Werte zu speichern.
Ich komme nicht mal an die erste Zelle:

Code: Alles auswählen

wert1=Tab_Window .Tab1.Tabelle1 .item(0,0).text()
Fehlermeldung: in Tab_Window ist kein Tab1 (oder Tabelle1) vorhanden.... (AttributeError: type object 'Tab_Window' has no attribute 'Tab1'

In Tab_Window wurden die Variablen in der def __init__(self) erstellt (mit self.)
Stellt sich mir grundsätzlich die Frage, wie man von außen an Variablen einer fremden Klasse herankommt?
Bei Versuchen gelingt es mir nur, wenn diese nicht einer Prozedur stehen.
Wer erbarmt sich...?

Re: Daten aus anderer class lesen...

Verfasst: Montag 1. Juni 2020, 12:09
von sparrow
Zeig doch mal nachvollziehbaren Code und die vollständige Fehlermeldung. Weniger Prosa.

Wenn du dich an die Namenskonventionen gehalten hast, dann ist der Zugriff dahingehend falsch, dass du auf die Klasse und nicht die Instanz der Klasse zugreifen möchtest.

Re: Daten aus anderer class lesen...

Verfasst: Montag 1. Juni 2020, 13:33
von steenhy
Also Code:
Dann vergiss bitte meinen ersten Beitrag.
Problem: Wie komme ich an die Daten einer anderen Klasse.

Es gibt eine Klasse "Hauptfenster". Dies ist nur Rahmen mit Menu für das Fenster "TableView". In TableView wird ein Datenblatt angezeigt und die Werte vom Nutzer geändert.

Jetzt sollen die geänderten Daten aus dem Datenblatt gesichert werde, durch den Menüpunkt "Auswertung im Hauptfenster.
Wie geht so etwas...

Code: Alles auswählen

#!/usr/bin/env python


from PyQt5.QtWidgets import QApplication, QTableWidget,QTableWidgetItem
from PyQt5.QtWidgets import QTabWidget, QMainWindow, QApplication, QGridLayout,QPushButton,QLabel
from PyQt5.QtWidgets import QWidget, QAction, QTableWidget,QTableWidgetItem,QVBoxLayout
from PyQt5.QtCore import pyqtSlot,QSize

import sys

data = {'col1':['1','2','3','4'],
        'col2':['1','2','1','3'],
        'col3':['1','1','2','1']}


class Haupt_fenster(QMainWindow):
 
    def __init__(self, parent=None):
        super(Haupt_fenster, self).__init__(parent)
        self.setWindowTitle("BWA-Dateneingabe")
        tabs = TableView(data, len(data),5)  # hier wird das Dateneingabefenster eingebunden
 
        menubar = self.menuBar()     
        fileMenu = menubar.addMenu('&Datei')  
        neu = fileMenu.addAction("Neu")
        speichern = fileMenu.addAction("Speichern")
        ende =fileMenu.addAction("Ende")
        ausw = QAction("Auswertung",self)
        menubar.addAction(ausw)
        self.setStyleSheet("font: bold 12px;")
        
        ausw.triggered.connect(self.auswertung) 
        self.setMinimumSize(QSize(300, 300))

        self.setCentralWidget(tabs)
        
        self.show()
  ############################################  
    def auswertung(self):                         
        tabelle1 = TableView()                  # Hier ist alles falsch, TableView will Parameter data      
        print(tabelle1.item(0,0).text())         # Ich möchte auf die angzeigten Daten zugreifen
#######################################################



class TableView(QTableWidget):
    def __init__(self,data, *args):
        QTableWidget.__init__(self, *args)
        self.data = data
        self.setData()
        self.resizeColumnsToContents()
        self.resizeRowsToContents()
        self.setWindowTitle('Datenblatt Bsp.') 

 
    def setData(self):
        horHeaders = []
        for n, key in enumerate(sorted(self.data.keys())):
            horHeaders.append(key)
            for m, item in enumerate(self.data[key]):
                newitem = QTableWidgetItem(item)
                self.setItem(n, m, newitem)
        self.setVerticalHeaderLabels(horHeaders)

 
def main(args):
    app = QApplication(args)
    table = Haupt_fenster()
    table.show()
    sys.exit(app.exec_())
 
if __name__=="__main__":
    main(sys.argv)





Re: Daten aus anderer class lesen...

Verfasst: Montag 1. Juni 2020, 13:53
von Sirius3
`tabs` ist eine lokale Variable in Haupt_fenster.__init__. Du musst sie an ein Attribut self.tabs binden.

Re: Daten aus anderer class lesen...

Verfasst: Montag 1. Juni 2020, 17:45
von steenhy
Mit self geht es.....
Vielen Dank für den Tip!!!!

Für mein erstes Beispiel sieht die Lösung etwa so aus:

Code: Alles auswählen

        print(self.tabs.Tabelle1.item(0,0).text())

Wenn man die Lösung weiß, ist plötzlich alles so einfach....