Wie kann ich ein GUI auf der Spitze einer Python-APP, damit Sie es tun können entweder GUI oder CLI?

StackOverflow https://stackoverflow.com/questions/2857634

Frage

Ich bin versucht zu schreiben, eine app in python zur Steuerung eines Motors über die serielle.Dies alles funktioniert in einer CLI-situation fein und ist in der Regel stabil.aber ich Frage mich, wie einfach es war zum hinzufügen einer GUI auf oben auf dieser code-Basis?

Ich nehme an, es wird mehr code, aber es ist eine einfache Möglichkeit, die Erkennung von so etwas wie GTK, so dass es nur dann Anwendung, die code, wenn GTK vorhanden war?

Auch, GUI-Erstellung in Python im Allgemeinen:es ist am besten zu halten, wie wenig die GUI-Spezifika aus dem code und verwenden Sie so etwas wie GTK XML-basierenden Ansatz (mit gtk.glade.XML () - Funktion)?Gibt es noch andere GUI-toolkits, die haben einen ähnlichen Ansatz, um den Waldwiese / XML / "Explodieren Code" - Ansatz?

Vielen Dank für jeden Rat.

Andy

War es hilfreich?

Lösung

Gibt es eine einfache Möglichkeit, etwas wie GTK zu erkennen, sodass er nur den Code angewendet hat, wenn GTK anwesend war?

Brechen Sie zuerst Ihre App in 3 separate Module.

  1. Die eigentliche Arbeit: foo_core.py.

  2. Ein CLI -Modul, das importiert foo_core. Nennen foo_cli.py.

  3. Ein GUI -Modul, das importiert foo_core. Nennen foo_gui.pyw.

Das foo_cli Das Modul sieht so aus.

import foo_core
import optparse

def main():
    # parse the command-line options
    # the real work is done by foo_core

if __name__ == "__main__":
   main()

Das foo_gui Modul kann so aussehen.

 import foo_core
 import gtk # or whatever

 def main()
     # build the GUI
     # real work is done by foo_core under control of the GUI

 if __name__ == "__main__":
     main()

Das reicht im Allgemeinen aus. Den Menschen kann vertraut werden, dass sie selbst entscheiden, ob sie CLI oder GUI wollen.

Wenn Sie Menschen verwirren möchten, können Sie eine schreiben foo.py Skript, das so etwas wie folgt tut.

try:
    import foo_gui
    foo_gui.main()
except ImportError:
    import foo_cli
    foo_cli.main()

Andere Tipps

Es hängt davon ab, welche Art von Interaktion Sie möchten.

Wenn Sie eine echte GUI wollen, können Sie die verwenden bescheidener Dialog Muster, um die GUI -Sachen aus der Programmlogik zu entkoppeln und mit einem Text "GUI" mit der CLI zu handhaben. Dies hat auch den schönen Nebeneffekt, dass große Teile der GUI programmierbar werden.

Eine andere Möglichkeit besteht darin, Sys.stdin und Sys.S.S. Dies bedeutet, dass Sie weniger Interaktionsmöglichkeiten in der GUI haben, aber viel weniger Programmieraufwand.

Ich weiß nicht empfehlen, tun eine GUI in XML.Alle XML tut, ist Ihnen eine mini-Sprache für die Beschreibung eines Layouts.Warum verwenden Sie einen mini-Sprache, wenn Sie die volle Leistungsfähigkeit von python?

Für die Erkennung GTK, ich würde nicht empfehlen, dass.Stattdessen fügen Sie eine command-line-argument, um zu bestimmen, ob eine GUI oder nicht (z.B.:myprogram -g).Es wird dann einfach zu erstellen eine desktop-Verknüpfung oder über die Befehlszeile alias zum start in den GUI-Modus, während immer noch in der Lage, verwenden Sie die Befehlszeilen-tool von jedem terminal.

Sie tun, jedoch, wollen zu halten, den GUI-code getrennt von den bits, die die eigentliche Arbeit.Geben youself eine Klasse, die enthält alle die business-Logik, dann müssen Sie den GUI-und CLI-sowohl Zugriff auf dieses Objekt zu arbeiten.

Nun, was ich tue, ist, dass ich ein einziges Bash -Skript mit Folgendem habe:

if [ "${0}" == "mcm" ]; then
    /usr/bin/python ${inst_dir}/terminal/mcm-terminal.py ${@}
else
    /usr/bin/python ${inst_dir}/gtk/mcm-gtk.py &
fi

Dann erstelle ich zwei Symlinks:/usr/sbin/mcm und/usr/bin/mcm-gtk

Funktioniert sehr nett.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top