mein erstes Programm...

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 habe mein erstes Python-Projekt fast fertig.
Dabei geht es um die Auswertung von csv-Dateien.
Das Ergebnis habe ich in einer Directory Liste gespeichert.
Diese Daten möchte ich in einer Datentabelle anzeigen.
Im Netz habe ich folgende Anwendung gefunden:

Code: Alles auswählen

from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction, QTableWidget,QTableWidgetItem,QVBoxLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
import sys

data = {'col1':['1','2','3','4'],
        'col2':['1','2','1','3'],
        'col3':['1','1','2','1']}
 
class TableView(QTableWidget):
    def __init__(self, data, *args):
        QTableWidget.__init__(self, *args)
        self.data = data
        self.setData()
        self.resizeColumnsToContents()
        self.resizeRowsToContents()
 
    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(m, n, newitem)
        self.setHorizontalHeaderLabels(horHeaders)
 
def main(args):
    app = QApplication(args)
    table = TableView(data, 4, 3)
    table.show()
    sys.exit(app.exec_())
 
if __name__=="__main__":
    main(sys.argv)

Dieser code wird in der Datei table.py gespeichert.
Jetzt möchte ich dies Programm aus meiner Anwendung aufrufen und meine Daten als Parameter übergeben.
Ich weiß nur, das man das Programm mit Import table einbindet.
Doch wie wird es gestartet?

Gruß,

P.S. Ich werde noch die 10 Bücher zum Thema objektorientierte Programmierung durcharbeiten....
steenhy
User
Beiträge: 19
Registriert: Montag 23. März 2020, 20:22

Pardon,
es ist natürlich eine Dictionarie-Liste...
bitte um Gnade
Sirius3
User
Beiträge: 18051
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du dieses Modul in einem anderen Teil Deines Programms nutzen willst, mußt Du genau das selbe tun, wie hier in der `main`-Funktion: Eine QApplication erstellen (falls die noch nicht existiert) und dann ein Exemplar des TableView. Wobei das, was dann in TableView gemacht wird, nicht sehr viel ist, und besser an Dein tatsächliches Datenformat anzupassen wäre.
Normalerweise hat man ja eine Liste von Listen und die Header-Zeile ist extra.
Wie sieht denn das Programm aus, das die Daten erzeugt?
steenhy
User
Beiträge: 19
Registriert: Montag 23. März 2020, 20:22

Danke für die Antwort.
Ich stochere noch weiter im Dunkeln...
Meine Liste sieht ähnlich aus wie im Beispiel.

Code: Alles auswählen

ergebnis= {'B BETRIEB 1 209': [], 'B BETRIEB 1 403': ['3607.100'], 'B BETRIEB 1 407': [], 'B BETRIEB 1 420': [], 'B BETRIEB 1 502': [], 'B BETRIEB 1 6303': ['5311.000'], 'B BETRIEB 1 10075': [], 'B BETRIEB 1 10121': [], 'B BETRIEB 1 10127': ['3600.000'], 'B BETRIEB 1 10154': [], 'B BETRIEB 1 10156': [], 'B BETRIEB 1 10171': [], 'B BETRIEB 1 10172': ['3607.100', '4161.002', '4518.000', '5325.000']} 
Nur nicht so schön formatiert.
Wenn ich dies in das Beispiel oben einsetze und in der def main.table die Variable data gegen ergebnis tausche dann wird mir auch die richtige Tabelle angezeigt.
Nur wie starte ich dies von außen, mit einer neuen Ergebnisliste als Parameter?
Ich habe es schon aus der shell versucht, hier bekomme ich nur tlw. Zugriff.
Dann habe ich den ganzen Mus in meine Anwendung reinkopiert, auch ohne Erfolg.

Ich weiß, die Antwort steht in den 5-Büchern....
Benutzeravatar
__blackjack__
User
Beiträge: 13533
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@steenhy: Das hat Sirius3 doch schon beantwortet. Du musst ”von aussen” das tun, was in dem Modul in der `main()`-Funktion getan wird.

Und mit dem was Du versucht hast und was daraufhin passiert ist etwas konkreter werden. Denn mit in der Shell versucht (welcher? wie?) und nur teilweise Zugriff (was bedeutet das konkret?) kann hier keiner etwas anfangen.

Genau so mit der zweiten Aussage das Du „den ganzen Mus“ in Deine Anwendung rein kopiert hast. Was ist „der ganze Mus“ genau? Und nur das irgend wo anders rein kopieren nützt natürlich nichts, in dem anderen Code musst Du ja irgendwo auch Code stehen haben der ein Exemplar von der Klasse erstellt und dabei die Daten übergibt.

Code: Alles auswählen

- (void)countSheep {
    unsigned int sheep = 0;
    while ( ! [self isAsleep]) { ++sheep; }
}
steenhy
User
Beiträge: 19
Registriert: Montag 23. März 2020, 20:22

Hi,
danke für Eure Hinweise.
Ich steuere das Modul aus einer anderen py-Datei (haupt.py) und dort aus einer "class MyWindow(QMainWindow):" Dies Fenster wurde ja bereits über

Code: Alles auswählen

app = QtWidgets.QApplication([])
win = MyWindow()
win.show()
app.exec_()
gestartet. Daher kam ich mit dem 'app'-Ansatz nicht weiter.
Es reicht aus, wenn ich die Datentabelle in "haupt.py" über

Code: Alles auswählen

          # Ergebnis-Tabelle wird angezeigt, ext. Modul table.py
                self.tabelle = table.TableView(ergebnis, len(ergebnis),15)  # 15 Spalten
                self.tabelle.show()
                
starte. Dies erfolgt in der class MyWindow.
Da ich völlig ahnungslos bin, war mir nicht klar, dass dies wichtig ist...
Bitte um Verzeihung, beim nächsten mal versuche ich mich klarer auszudrücken.
Viele Grüße und bleibt gesund...

P.S. Die Elemente des PyQT5 sind vom Erscheinen recht retro... Gibt es da etwas Aktuelleres?
Benutzeravatar
__blackjack__
User
Beiträge: 13533
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@steenhy: Das `My` im Klassennamen macht keinen Sinn. Es sei denn Du hast auch ein `OurWindow` oder ein `TheirWindow` oder etwas in der Art.

Wie Qt aussieht wird durch Themes bestimmt.

Code: Alles auswählen

- (void)countSheep {
    unsigned int sheep = 0;
    while ( ! [self isAsleep]) { ++sheep; }
}
Antworten