Daten aus anderer class lesen...

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
steenhy
User
Beiträge: 19
Registriert: Montag 23. März 2020, 20:22

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...?
Benutzeravatar
sparrow
User
Beiträge: 4528
Registriert: Freitag 17. April 2009, 10:28

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.
steenhy
User
Beiträge: 19
Registriert: Montag 23. März 2020, 20:22

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)




Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

`tabs` ist eine lokale Variable in Haupt_fenster.__init__. Du musst sie an ein Attribut self.tabs binden.
steenhy
User
Beiträge: 19
Registriert: Montag 23. März 2020, 20:22

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....
Antworten