Fenster mit QHBoxLayout schließen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Sophus:
Nein, das war z.T. richtig. Aber einige der Fragen hast du wohl falsch verstanden bzw. hatte ich unklar formuliert:
Sophus hat geschrieben:- Was macht der Zuweisungsoperator in Python?
Ein Zuweisungsoperator ist ein Gleichheitszeichen. Eine Zuweisung besteht demzufolge aus einem Namen, gefolgt von einem Gleichheitszeichen und einem Wert. Zum Beispiel: x = 1 Hier ist x ein Name und 1 der Wert. Würde ich in einem Interaktionsmodus nun x eingeben, so würde ich den 1 bekommen. Ich stelle mir Variablen wie ein Schuhkarton vor. Der Name der Variable (hier: x) ist sozusagen die Aufschrift des Schuhkartons. Und der Wert 1 sind dann die Schuhe im Karton. Über den Namen der Variablen kann ich also auf meine Schuhe zugreifen.
Ja das Bild passt ganz gut, wobei die Schuhe nicht im Karton liegen, sondern eher ein Zettel, wo drauf steht, wo man sie findet. Das ist insofern wichtig, dass die Schuhe nicht "im Karton" sondern gesondert existieren, da mit Entfernen des Kartons nicht automatisch die Schuhe weg sind, sondern nur der Zettel. Der Zettel ist nur ein Verweis oder eine Referenz auf die Schuhe, während die Schuhe das Objekt sind. Python zählt die Referenzen auf Objekte mit, wenn es keine mehr gibt, wird das Objekt zur Vernichtung freigegeben und irgendwann geschreddert. Deshalb spricht man in Python auch von Bindung eines Objektes an einen Namen und seltener von Variablenzuweisung (das Objekt wird eben nicht der Variablen zugewiesen, technisch korrekt ist es nur eine Referenz). Das das Objekt irgendwo "lebt" (wo muss uns nicht interessieren, da kümmert sich Python drum), erkennt man indirekt an Löschversuchen:

Code: Alles auswählen

class Foo: pass
foo = Foo()

# unsaubere Kurzform: gib Objekt foo aus
# was eigentlich passiert: hole Objekt, welches an foo gebunden ist und gib es aus
# achte auf die Hexnummer (ist die Objekt-ID)
print foo

# unsaubere Kurzform: erzeuge Liste mit Objekt foo und weise Liste l zu
# was eigentlich passiert: hole Objekt, welches an foo gebunden ist, erzeuge eine neue Referenz,
# übergib Referenz an Listenkonstruktor (erzeugt Listenobjekt mit der Referenz als erstes Element),
# binde erstelltes Listenobjekt an l
l = [foo]

# Lösche Objekt foo? --> NEIN!
# hier versagt die Kurzform, gelöscht wird nur der Name mit der Referenz
del foo

# gib die Liste aus (auch wieder unsauber, aber wer will schon schreiben:
# hole Objekt, welches an l gebunden ist, von dem wir wissen, dass es eine Liste ist,
# und gib dieses aus)
# ==> Objekt "lebt" noch, vgl. Objekt-ID
print l
Sophus hat geschrieben:- Was macht eigentlich `Klassenname()` in Python?
Ein Klassenname schreibt man mit großen Anfangsbuchstaben.
Die Frage war nicht, wie man Klassennamen schreibt, sondert zielte auf die Klammern ab - also was passiert, wenn man eine Klasse "aufruft".
Sophus hat geschrieben:- Unterschied zu `funktionsname()`?
Damit eine Funktion im Programmteil aufgerufen werden kann, braucht es einen Namen, also Funktionsnamen. Im Gegensatz zu einer Name der Klasse beginnen Funktionsnamen mit kleinen Buchstaben.
Was ist der Unterschied eines "Klassenaufrufs" zu einem Funktionsaufruf?
Sophus hat geschrieben:- Was macht der Punktoperator in Python?
Nun, ich kenne in VB6 die Punktoperatoren als einen Zugriffoperator. Allerdings weiß ich nicht, ob du das meinst. In Python würde ich den Punktoperator sehr deutlich an einem Beispiel der MenuBar zeigen, den dort wird sehr viel mit Punktoperator gearbeitet. Zum Beispiel: self.Attribut.Menuitem.triggered.connect(self.Funktion/Methode).
Ja und was macht der nune in Python?
Sophus hat geschrieben:- Was sind Attribute?
Zum Beispiel kann ein Attribut ein Attribut einer Instanz der Klasse sein und wird bzw. muss dann deshalb mit Hilfe von "self" mit der Instanz verknüpft werden.
Du kannst doch nicht Attribut mit Attribut erklären ;)
Sophus hat geschrieben:- Was sind Methoden?
Man bedient sich an Methoden um eine Funktionalität zu erbringen. In meinem Fall ist die Methodenaufruf self.createToolBar. Mit diesem Aufruf wurde dann die Funktion def createToolBar(self) aufgerufen.
Und was ist der Unterschied zu Funktionen? Wie stehts um Methoden und Attribute?
Sophus hat geschrieben:- Was macht die Methode `centralWidget`?
Hierbei ist es wichtig, dass ein QWidget vom QMainWindow erben muss, da QMainWindow diese Methode besitzt. Diese Methode dient dazu, dass man sie mit entsprechendem Inhalt füllen muss, da man auf einem Hauptfenster, welcher von der QMainWindow abgeleitet wurde, nicht einfach so Elemente hinzufügen kann.So Kann man zum Beispiel ein Objekt QWidget auf QMainWindow platzieren und als centralWidget setzen.
Ok, die Frage nochmal expliziter: Was macht die Methode `QWidget * QMainWindow::centralWidget () const`? (Antwort siehe Qt-Doku)
Sophus hat geschrieben:- Was macht die Methode `addSubWindow`?
Diese Methode macht es möglich ein QWidget oder auch ein QDialog zum MdiArea-Widget zum Inhalt zu machen. Vorher wird aber ein QWidget zum Inhalt von der Methode ‚addSubWindow()‘. Nachdem dies geschehen ist, wird das QWidget über diese Methode an die Methode ‚centralWidget()‘ gehängt.
Was macht die Methode `QMdiSubWindow * QMdiArea::addSubWindow ( QWidget * widget, Qt::WindowFlags windowFlags = 0 )`? (Antwort siehe Qt-Doku)

Wenn Du die Fragen beantwortest, kannst Du obige Programmzeile verstehen und weiss auch, wo sich die Exemplare "verstecken". Evtl. unter Klärung der Frage "Was ist in Python alles Objekt?" und den Unterschied von Klasse zu Exemplar ("Instanz").

Edit: Kommentare waren unvollständig. Desweiteren in Deiner Aussage
Sophus hat geschrieben:Diese Methode macht es möglich ein QWidget oder auch ein QDialog zum MdiArea-Widget zum Inhalt zu machen.
macht das "oder auch" keinen Sinn. Die Klasse QMdiArea erlaubt QWidget-Typen. Falls Dir nicht klar ist, warum ein QDialog-Typ auch funktioniert --> OOP, Stichwort Vererbung schafft Klarheit.
Antworten