Python 3.6 GUI- mit Button ein Programm ausführen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
NC-E
User
Beiträge: 6
Registriert: Donnerstag 12. Juli 2018, 07:25

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()
:?: „Passwörter sind wie Unterwäsche. Du darfst sie keinen sehen lassen, musst sie regelmäßig wechseln und solltest sie nicht mit Fremden tauschen.“ :idea:
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

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()
NC-E
User
Beiträge: 6
Registriert: Donnerstag 12. Juli 2018, 07:25

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
:?: „Passwörter sind wie Unterwäsche. Du darfst sie keinen sehen lassen, musst sie regelmäßig wechseln und solltest sie nicht mit Fremden tauschen.“ :idea:
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

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()
NC-E
User
Beiträge: 6
Registriert: Donnerstag 12. Juli 2018, 07:25

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
:?: „Passwörter sind wie Unterwäsche. Du darfst sie keinen sehen lassen, musst sie regelmäßig wechseln und solltest sie nicht mit Fremden tauschen.“ :idea:
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo liegt die Datei `batch.bat`? Im Verzeichnis D:\Documents\Python\Erste Versuche\totalmade?
NC-E
User
Beiträge: 6
Registriert: Donnerstag 12. Juli 2018, 07:25

Ich möchte die Datei "Chef.bat" öffnen welche im angegebenen Ordner liegt.
:?: „Passwörter sind wie Unterwäsche. Du darfst sie keinen sehen lassen, musst sie regelmäßig wechseln und solltest sie nicht mit Fremden tauschen.“ :idea:
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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. ;-)
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
NC-E
User
Beiträge: 6
Registriert: Donnerstag 12. Juli 2018, 07:25

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")
:?: „Passwörter sind wie Unterwäsche. Du darfst sie keinen sehen lassen, musst sie regelmäßig wechseln und solltest sie nicht mit Fremden tauschen.“ :idea:
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Nee, da steht [Chef.bat.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
NC-E
User
Beiträge: 6
Registriert: Donnerstag 12. Juli 2018, 07:25

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()
:?: „Passwörter sind wie Unterwäsche. Du darfst sie keinen sehen lassen, musst sie regelmäßig wechseln und solltest sie nicht mit Fremden tauschen.“ :idea:
Hofei
User
Beiträge: 14
Registriert: Freitag 6. Januar 2017, 20:15

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"
Antworten