2017-05-12 1 views
1

Ich habe einen Python-Skript (wir „script.py“ sagen), dass ich mag Werte greifen aus einem separaten GUI Python-Skript („GUI.py“). Wenn ich mein GUI.py-Skript ausführe, möchte ich, dass diese Textfelder in der GUI nach dem Klicken auf eine Schaltfläche in der GUI zu script.py gesendet werden. Ich denke, dass meine beste Lösung sein könnte, GUI.py ein anderes Skript ("lib.py") erstellen zu lassen, das all diese Werte enthält und es einfach in es schreibt. Es führt dann das Skript "script.py" aus. Also alles in allem wird die GUI.py eine Funktion hat, dass, wenn so etwas wie dies aussehen wird genannt:Python: Passing Werte von GUI zu anderem Python-Skript

def on_button(self): 
    username = self.usernameInput.get() 
    file = open(“lib.py”,”w”) 
    file.write(“username = ” + username) 
    os.system("script.py") 

Ich denke, das wird funktionieren, aber ich frage mich nur, bedeutet dies wie eine praktische Lösung scheinen? Lass mich wissen, was ihr denkt.

+0

NOPES es wird nicht 'file.write („username =“+ username) arbeitet' ist nicht der richtige Weg, Eingang zu einem Python-Skript zu geben, es würde stattdessen diese Inhalte direkt auf Ihre '.py' Datei schreiben, und kann Machen Sie Ihre '.py' Datei beschädigt, wenn ich einen bizzaren' Benutzernamen' eingebe. – ZdaR

+0

Eine andere Option wäre, Ihr Skript so einzurichten, dass es von 'sys.argv' liest und dann Ihre Argumente durch 'subprocess.call' weiterleitet. –

Antwort

2

Nein, ich denke nicht, dass dies die praktische Lösung ist.

Ziehen Sie in Betracht, stattdessen das Python-Skript, das Sie ausführen möchten, in ein Modul oder ein Paket zu setzen, das Sie direkt in Ihrer GUI aufrufen können? Ich denke, das ist der sauberste Ansatz. Informationen zum Verwenden der Skripts als Module finden Sie unter docs oder 2.7.

Im Grunde ein Modul ist eine Python-Datei, script.py, und solange es in der Python-Pfad ist (sagen wir, Ihr aktuelles Verzeichnis) können Sie import es:

from script import action 

So könnten Sie versuchen:

def on_button(self): 
    username = self.usernameInput.get() 
    result = action(username) # and any other args you want to pass 
    print(result) 

das heißt, wenn das Skript in Frage verwendet eine if __name__ == "__main__": Aussage (oder kann sonst von der Kommandozeile ausgeführt werden), versuchen, die Vorgänge in einigen def action(args): Funktion setzen und in Ihre GUI importieren.

+0

Ok, es verwendet eine "if __name__ ==" __main__ ":" Anweisung. Es ist jedoch nicht nur der Benutzername, den ich weitergeben möchte. Es gibt eine Reihe von Werten. Ich möchte alle diese Werte in script.py übergeben und dann möchte ich script.py ausführen. Also sollte ich vielleicht Methoden zu script.py hinzufügen, die es Benutzern erlauben, die Werte zu übergeben? Wie "def getUsername (Benutzername):"? Oder gibt es eine Möglichkeit, die Hauptfunktion über die GUI auszuführen? – BUInvent

+0

Absolut! Sie können jede Funktion innerhalb der GUI ausführen, wenn Sie sie importieren und die erforderlichen Parameter ** übergeben **. So können Sie mehr als nur den Benutzernamen weitergeben oder auch eine Konfigurationsdatei hinzufügen, wenn Sie bevorzugen; Punkt ist, das Skript als ein Modul innerhalb der GUI zu nennen (egal wie viele Dinge Sie an die __main__ Funktion übergeben – Nevermore

+0

OK, ich denke ich sehe was du sagst. Wenn es ein "if __name__ ==" __main__ ":" Funktion in script.py, dann sollte ich versuchen, dies zu einer Art "def Aktion (Argumente):" -Funktion zu ändern, so dass ich alle Werte übergeben kann. Richtig? Oder falsch? – BUInvent