Seite 1 von 1

Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 08:30
von NC-E
Guten Tag liebe Community,

Wie kann ich durch drücken eines Buttons, ein Programm starten? -Egal ob .exe oder .bat ist.
Im aktuellen Stadium würde ich gerne ein Batch Programm ausführen und dieses nach und nach direkt in Python übertragen.


Ich würde mich über eine Sachlich unkomplizierte Lösung sehr freuen.

-Ps: Ich bin absoluter Anfänger und bin mit Begeisterung bei der sache.

Mit besten grüßen
NC-E

Code: Alles auswählen

from tkinter import *
from subprocess import *


fenster = Tk()
fenster.title("Chef-Programm")
fenster.geometry("500x500")


def ausgabe1(): 
    p = Popen("batch.bat", cwd=r"D:\Documents\Python\Erste" "Versuche\totalmade\Chef.bat")
    stdout, stderr = p.communicate
def ausgabe2():
    print ("xxx")
    
    


knopf1 = Button(fenster, text="Spyder", command=ausgabe1) #erzeugt knopf
knopf1.pack()

knopf2 = Button(fenster, text="Python CMD", command=ausgabe2)
knopf2.pack()

mainloop()

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 09:01
von Sirius3
Was funktioniert denn an Deinem Versuch nicht?

Das Verzeichnis in dem "batch.bat" liegt, enthält mit großer Warscheinlichkeit kein Tab-Zeichen und endet hoffentlich nicht auf .bat. Funktionen sollte man auch aufrufen, hier reicht aber auch ein subprocess.call.

Sternchenimporte vermeiden, weil man nicht kontrollieren kann, welche Namen da in den eigenen Namensraum importiert werden.

Code: Alles auswählen

import tkinter as tk
import subprocess

def ausgabe1(): 
    subprocess.call(["batch.bat"], cwd=r"D:\Documents\Python\Erste Versuche\totalmade")

def ausgabe2():
    print("xxx")

def main():
    fenster = Tk()
    fenster.title("Chef-Programm")
    Button(fenster, text="Spyder", command=ausgabe1).pack()
    Button(fenster, text="Python CMD", command=ausgabe2).pack()
    fenster.mainloop()

if __name__ == '__main__':
    main()

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 10:29
von NC-E
Sirius3 hat geschrieben: Donnerstag 12. Juli 2018, 09:01 Was funktioniert denn an Deinem Versuch nicht?

Das Verzeichnis in dem "batch.bat" liegt, enthält mit großer Warscheinlichkeit kein Tab-Zeichen und endet hoffentlich nicht auf .bat. Funktionen sollte man auch aufrufen, hier reicht aber auch ein subprocess.call.

Sternchenimporte vermeiden, weil man nicht kontrollieren kann, welche Namen da in den eigenen Namensraum importiert werden.

Code: Alles auswählen

import tkinter as tk
import subprocess

def ausgabe1(): 
    subprocess.call(["batch.bat"], cwd=r"D:\Documents\Python\Erste Versuche\totalmade")

def ausgabe2():
    print("xxx")

def main():
    fenster = Tk()
    fenster.title("Chef-Programm")
    Button(fenster, text="Spyder", command=ausgabe1).pack()
    Button(fenster, text="Python CMD", command=ausgabe2).pack()
    fenster.mainloop()

if __name__ == '__main__':
    main()
Vielen dank für die schnelle Antwort.
Die auszuführende Datei ist eine .exe.
Die Batch datei öffnet bei Ausführung mehrere .exe datein.

Allerdings wenn ich Ihren vorgeschlagenen Code verwende, bekomme ich eine Fehlermeldung:

File "D:/Documents/Python/Erste Versuche/totalmade/chef-selfmade.py", line 6, in main
fenster.title("Chef-Programm")

AttributeError: module 'tkinter' has no attribute 'title'

Kann ich die .exe datein öffnen welche ich durch das ausführen von Button 1 öffnet.

MfG NC-E

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 10:46
von Sirius3
Ich bin ja auch noch im Halbschlaf:

Code: Alles auswählen

import tkinter as tk
import subprocess

def ausgabe1(): 
    subprocess.call(["batch.bat"], cwd=r"D:\Documents\Python\Erste Versuche\totalmade")

def ausgabe2():
    print("xxx")

def main():
    fenster = tk.Tk()
    fenster.title("Chef-Programm")
    tk.Button(fenster, text="Spyder", command=ausgabe1).pack()
    tk.Button(fenster, text="Python CMD", command=ausgabe2).pack()
    fenster.mainloop()

if __name__ == '__main__':
    main()

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 11:27
von NC-E
Sirius3 hat geschrieben: Donnerstag 12. Juli 2018, 10:46 Ich bin ja auch noch im Halbschlaf:

Code: Alles auswählen

import tkinter as tk
import subprocess

def ausgabe1(): 
    subprocess.call(["batch.bat"], cwd=r"D:\Documents\Python\Erste Versuche\totalmade")

def ausgabe2():
    print("xxx")

def main():
    fenster = tk.Tk()
    fenster.title("Chef-Programm")
    tk.Button(fenster, text="Spyder", command=ausgabe1).pack()
    tk.Button(fenster, text="Python CMD", command=ausgabe2).pack()
    fenster.mainloop()

if __name__ == '__main__':
    main()
Schön langsam wird es mir peinlich....
worin liegt der fehler?

hab es genauso abetippt und bekomme dennoch eine meldung:

runfile('D:/Documents/Python/Erste Versuche/totalmade/chef-selfmade.py', wdir='D:/Documents/Python/Erste Versuche/totalmade')
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\PortableAPPS\WinPython\python-3.6.5.amd64\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "D:/Documents/Python/Erste Versuche/totalmade/chef-selfmade.py", line 5, in ausgabe1
subprocess.call(["batch.bat"], cwd=r"D:\Documents\Python\Erste Versuche\totalmade")
File "D:\PortableAPPS\WinPython\python-3.6.5.amd64\lib\subprocess.py", line 267, in call
with Popen(*popenargs, **kwargs) as p:
File "D:\PortableAPPS\WinPython\python-3.6.5.amd64\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 169, in __init__
super(SubprocessPopen, self).__init__(*args, **kwargs)
File "D:\PortableAPPS\WinPython\python-3.6.5.amd64\lib\subprocess.py", line 709, in __init__
restore_signals, start_new_session)
File "D:\PortableAPPS\WinPython\python-3.6.5.amd64\lib\subprocess.py", line 997, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 11:49
von Sirius3
Wo liegt die Datei `batch.bat`? Im Verzeichnis D:\Documents\Python\Erste Versuche\totalmade?

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 12:00
von NC-E
Ich möchte die Datei "Chef.bat" öffnen welche im angegebenen Ordner liegt.

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 12:07
von __blackjack__
@NC-E: Wo steht denn im Code das die Datei `Chef.bat` ausgeführt werden soll? So ein ganz kleines bisschen selber mitdenken kann nicht schaden. ;-)

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 12:15
von NC-E
steht in def ausgabe1 anstatt der Batch.bat- Chef.bat die von Sirius als Vorlage geschickt hat.

-->

Code: Alles auswählen

def ausgabe1():
    subprocess.call(["[Chef.bat"], cwd=r"D:\Documents\Python\Erste Versuche\totalmade")

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 12. Juli 2018, 12:29
von __blackjack__
Nee, da steht [Chef.bat.

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Dienstag 17. Juli 2018, 12:37
von NC-E
Hier ist meine Lösung die aktuell meine Frage Beantwortet.
Habe aber feststellen müssen, dass ich aus dem Python script keine Batch Datei öffnen kann.
LG

Code: Alles auswählen

import tkinter
import os

Top = tkinter.Tk()
Top.title('MasterControl')
Top.geometry('700x600')

#Frame erstellen



#Button
A = tkinter.Button(master=None, text="NotePad", width="20", command=lambda:os.system('D://PortableAPPS/NotePad++Portable/NotePad++Portable.exe'))
B = tkinter.Button(master=None, text="SpyderEditor", width="20", command=lambda:os.system('D://PortableAPPS/WinPython/Spyder.exe'))
C = tkinter.Button(master=None, text="Chef-Batch", width="20", command=lambda:os.system('D://Arbeit/xx/Programmieren/Chef/-Chef-.bat'))
D = tkinter.Button(master=None, text="NotePad", width="20", command=lambda:os.system('D://PortableAPPS/NotePad++Portable/NotePad++Portable.exe'))
E = tkinter.Button(master=None, text="NotePad", width="20", command=lambda:os.system('D://PortableAPPS/NotePad++Portable/NotePad++Portable.exe'))


A.pack()
B.pack()
C.pack()
D.pack()
E.pack()


Top.mainloop()

Re: Python 3.6 GUI- mit Button ein Programm ausführen

Verfasst: Donnerstag 26. Juli 2018, 13:20
von Hofei
Wie bist du denn vom korrekten subprocess zu os.system gekommen? Welches nicht mehr verwendet werden soll.

Also ich kann schon über ein Pythonskript eine Batch starten welche wiederrum eine exe startet
Py Skript:

Code: Alles auswählen

import subprocess

subprocess.run("test.bat")
Batch:

Code: Alles auswählen

start /b "" "C:\Users\***\PycharmProjects\test\kitty_6702.exe"