Dialog aus Konsolenapplikation

Plattformunabhängige GUIs mit wxWidgets.
Antworten
ChrisGTJ
User
Beiträge: 105
Registriert: Mittwoch 22. August 2007, 15:45

Hallo Leute,

ist es irgendwie möglich, aus einer reinen Konsolenapplikation ein Dialogfenster über wx zu erzeugen und zu benutzen?

Hintergrund:
Innerhalb einer recht komplexen Konsolenapplikation soll die Möglichkeit bestehen, über einen einfachen Dialog (yes/no und ok) ein gewisses Maß an Interaktion mit dem Benutzer herzustellen.

Ich könnte einen Thread erzeugen und in diesem eine wx Applikation starten, dann würde aber das Fenster der App im Bildschirm rumhängen, das möchte ich nicht. Gibt es sowas wie eine "unsichtbare" Applikation?

BTW: Ich habe es schon genau so gemacht, nur daß da die App sichtbar ist. Bei Programmende muß ich immer noch mal auf das Fenster klicken, damit es auch wirklich verschwindet. Ist das ein einfaches Problem?

Gruß und Danke,

Christoph
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo ChristGTJ,

also meiner Meinung nach sollte man eine Konsolenapplikation und eine GUI nicht mischen.
Ich würde wahrscheinlich den Ansatz verfolgen das du bei wxPython alle stdout/stderr Ausgaben in einen eigenen Frame "redirectest" und dort ausgibst. Dann hat man zuminedest eine einheitliche Umgebung. Alle Entscheidungsaufforderungen die dann noch an den User gerichtet sind würde ich mit eigenen Dialogen überschreiben.

Das ist jetzt so ein schneller Gedanke, schwer zu sagen wenn man die KonsolenApp nicht vor sich hat. Ich persönlich würde es aber als sehr seltsam empfinden wenn aus einer Konsolenapplikation plötzlich ein Dialog Fragen an mich stellt ;)
ChrisGTJ
User
Beiträge: 105
Registriert: Mittwoch 22. August 2007, 15:45

Hallo Zap,

ich stimme Dir prinzipiell zu, Konsole ist Konsole, Fenster ist Fenster. Kurz der Hintergrund:

Die KonsolenApp führt Tests an einer Hardware aus, eigentlich sollten die automatisch laufen, aber leider braucht es manchmal Interaktion, die mit der weiteren Entwicklung der Applikation aber auch witestgehend automatisiert wird.

Auf der anderen Seite soll aber auch ein GUI auf die App gesetzt werden, von der aus dann die noch nötige Interaktion gesteuert wird.

Die jetzige Lösung ist also (mal wieder) ein Hack und Provisorium, leider.

Die Lösung ist, daß ich einfach eine wx-Applikation starte, die nichts weiter tut, als den Dialog zu präsentieren und wenn der Dialog beendet wird, beendet sich auch die App. Das Hauptfenster mache ich einfach so klein, wie es geht, dann ist sie im Prinzip unsichtbar, weil verborgen. Wie gesagt, ein Hack, falls jemand eine bessere Idee hat, her damit :)...

Danke füs's zuhören,

Christoph
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

weiss jetzt nicht, ob ich das ganz verstanden habe.

Jedoch wenn du eine Applikation hast, die automatisch ablaufen soll, wieso erstellst du nicht einfach ein Frame wo du ein TextControll drauf pepst. In dieses gibst du dann Stdout aus. Wen das fenster nicht angezeigt werden soll, kannst du es auf unvisible stellen. (Show)...

Und wegen den interaktionen... musst dann hald evtl nicht mehr mit print deien Ausgaben absetzten sondern über eine eigene KLasse, die du je nach Ausgabe anderst reagiert (So à la eine Ausgabe interface und eine Klasse für die Konsole und eine für wx Applikationene)
ChrisGTJ
User
Beiträge: 105
Registriert: Mittwoch 22. August 2007, 15:45

DatenMetzgerX hat geschrieben:
Jedoch wenn du eine Applikation hast, die automatisch ablaufen soll, wieso erstellst du nicht einfach ein Frame wo du ein TextControll drauf pepst. In dieses gibst du dann Stdout aus. Wen das fenster nicht angezeigt werden soll, kannst du es auf unvisible stellen. (Show)...
Ich glaube Du hast richtig verstanden. Dein Vorschlag ist zu simpel ;) aber wohl die Lösung. Ich werde das mal vorschlagen, mal sehen, was draus wird, denn bisher sind meine Dialoge nur U-Boote, d.h. noch nicht offiziell in der Software drin.

Danke!

Christoph
Antworten