[gelöst]Dialogfenster in PyQt modal ausführen

Alles rund um die Programmierung mit Qt
Antworten
PepeCyB
Beiträge: 7
Registriert: 19. Februar 2007 20:23

[gelöst]Dialogfenster in PyQt modal ausführen

Beitrag von PepeCyB »

Hallo,

ich bastele gerade an einem kleinen "Minimal-HTML-Editor" für die
Erstellung von Produktbeschreibungen bei eBay.

Nun möchte ich z. B. eine unsortierte Liste einfügen. Dies soll
in einem eigenen Dialogfenster erfolgen, welches mittels einer QSpinBox
die Anzahl der Listenelemente ermittelt und in einer QTable mit nur
einer Spalte die Listeneinträge erfaßt.
Das Dialogfenster soll, durch ein Signal veranlaßt, modal angezeigt
werden und nach Klick auf einen "Einfügen"-Button geschlossen werden.
Da das Anwendungsfenster und das Dialogfenster in zwei unterschiedlichen
Python-Modulen definiert werden, habe ich mich wohl oder übel dazu ent-
schlossen, die Übergabe der Listenelemente über eine globale (ja... ich
weiß... ist nicht schön... hab aber keine andere Lösung gefunden) Liste
zu bewerkstelligen. Das klappt auch ganz gut, jdeoch besteht die
Schweirigkeit, die Liste im Ablauf des "Hauptfensters" auszuwerten.

Hier nun mein Problem:

Das "Hauptfenster" wird in der Datei mainform_impl.py gehandhabt.
Hier wird die Slot-Funktion slList(self) definiert.
Zu Testzwecken habe ich hier die Zeile

print globals.globlist

angefügt, um zu überprüfen, ob die Liste wirklich in die globale Variable
übernommen wurde. Das ist auch so, aber leider wird die Zeile mit der
print-Anweisung bereits ausgeführt, bevor noch das Dialogfenster
mit besagten "Einfügen"-Button geschlossen wird. Es erscheint also
als Konsolenausgabe lediglich die als leere Liste zuvor initialisierte
Liste []. Ein erneuter Aufruf von slList(self) erzeugt dann aber
die Ausgabe der zuvor erstellten Liste. Die neu eingegebe Liste
wird wiederum in globals.globlist übernommen. aber natürlich wieder
nicht mit der print-Anweisung ausgegeben.

Frage:

Wie sorge ich dafür, daß der Programmablauf während der Ausführung des
Listendialoges quasi "angehalten" wird, bis das Dialogfenster mit
dem "Einfügen"-Buttons geschlossen wurde?
Zur Zeit "läuft" ja die Funktion slList(self) nach

self.liform.show()

quasi "weiter" und sorgt in der Zeile

print globals.globlist

für besagte nicht aktuelle Ausgabe. Somit könnte ich auch an dieser
Stelle nicht die Auswertung der Liste - also das Einfügen derselben
im QText-Widget des Hauptfensters - erledigen.

Hoffentlich konnte ich mich verständlich machen... und hoffentlich
kann mir jemand einen Tip geben.... meine Frau benötigt das "Progrämmle"
dringend...

Gruß
Daniel

Code: Alles auswählen

    def slList(self):
        self.liform=ulForm_Impl()
        self.liform.show()                       #hier soll quasi gewartet werde, bis der Dialog geschlossen wurde
        print globals.globliste 
Zuletzt geändert von PepeCyB am 20. Februar 2007 14:23, insgesamt 1-mal geändert.
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

servus, müsste dir weiter helfen :)

Code: Alles auswählen

if( self.liform.exec() == QDialog::Accepted ) {
          print globals.globliste
}
Ist im C++ Syntax, müsste auch in Python gehen.
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
PepeCyB
Beiträge: 7
Registriert: 19. Februar 2007 20:23

Beitrag von PepeCyB »

Hi,

danke... der Tip hört sich sehr gut an!!! Es gibt dabei nur das Problem, daß
Python selbst eine interne Anweisung namens "exec(filename)" kennt.
Somit führt der Aufruf von

self.liform.exec()

zu einem Syntax-Fehler.

Kennt sich jemand mit Python aus und kann mir verraten, wie ich das noch
zurechtbiegen kann?

Gruß Daniel
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

Was ist deine Form für ein Typ? (QWidget oder QDialog?)
Den Member exec() gibt es nur im QDialog?
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
PepeCyB
Beiträge: 7
Registriert: 19. Februar 2007 20:23

[gelöst]Dialogfenster in PyQt modal ausführen

Beitrag von PepeCyB »

Danke für die Rückfrage.... sie hat mich auf den richtigen Weg gebracht!!! :D

Besser gesagt: Der Hinweis auf die Member-Funktion "exec()"...
Ich hab mal rasch (hätte ich auch wirklich schon früher tun können) in die
PyQt-Doku geschaut. Dort steht bei QDialog, daß exec() wegen besagtem
Konflikt mit der Python-internen exec-Anweisung in exec_loop() umbenannt wurde.

Und siehe da: Es klappt.

Nochmal vielen Dank für die Hilfe.

Gruß
Daniel
Antworten