Seite 1 von 1
Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 08:11
von DasIngo
Hallo ich habe folgendes Problem ich habe mir eine Grafik Programmiert mit einem Button nun zu meinem Problem ich möchte mit dem Button eine andere Datei mit einer Grafik öffnen und nach der Auswahl das Alte Fenster schlissen ich denke ich habe den richtigen befehl dafür gefunden nur das ich die Datei mit der 2. Programmierten Grafik nicht geöffnet bekomme habe der Datei schon die Ausführbaren Rechte vergeben aber bei einem Doppel klick kommt auch das Fenster mit der Auswall Ausführen oder Öffnen aber beim Ausführen Öffnet sich nix?? Vielleicht hat ja jemand einen guten Tip für mich ich bin so langsam am verzweifeln.
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 08:19
von Sirius3
@DasIngo: Der gute Tip wäre, für andere hilfreiche Fehlerbeschreibungen zu schreiben. Dabei gilt der gute alte Grundsatz: Code sagt mehr als tausend Worte.
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 08:42
von DasIngo
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from tkinter import *
import os
def exit_():
os._exit(1)
fenster = Tk()
fenster.geometry("1000x500")
fenster.title("Nur ein Fenster")
b = Button(fenster, text = "Beenden", command = exit_)
b.pack()
fenster.mainloop()
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 08:49
von snafu
Bitte Code, der zu deiner Beschreibung passt. Du bist ja nach deinen eigenen Worten schon etwas weiter gekommen...
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 08:50
von BlackJack
@DasIngo: Und wo wird da jetzt etwas anderes ausgeführt?
Das `os._exit()` solltest Du durch `sys.exit()` ersetzen. Namen mit einem führenden Unterstrich gehören nicht zur öffentlichen API.
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 08:57
von DasIngo
Code: Alles auswählen
from tkinter import *
import os
import subprocess
#def start():
# os.sys("GrafiktestBeenden.py")
def wifi():
subprocess.call(["/home/pi/GrafiktestBeenden"],shell=True)
fenster = Tk()
fenster.geometry("500x500")
fenster.title("Nur ein Fenster")
b = Button(fenster, text = "Start", command=wifi)
b.pack()
fenster.mainloop()
das sind alles test Dateien zum probieren bevor ich es in die richtige Datei einsetze, mit der Datei will ich die andere Starten
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 09:02
von BlackJack
@DasIngo: Was wird denn auf der Konsole ausgegeben wenn Du das von dort startest und die Schaltfläche drückst?
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 09:02
von DasIngo
Code: Alles auswählen
#!/usr/bin/env python
from tkinter import *
from datetime import datetime, timedelta
import time
def wechsleFarbe1():
b1["fg"]="#01DF01"
return
def wechsleFarbe2():
b2["fg"]="#01DF01"
return
def wechsleFarbe3():
b3["fg"]="#01DF01"
return
def wechsleFarbe4():
b4["fg"]="#01DF01"
return
Haubtfenster = Tk()
Haubtfenster.title("Unser GUI Programm")
Haubtfenster.geometry("1200x800")
frame1 = Frame(Haubtfenster) #unsichtbares Fenster im Haubtfenster
lab1 = Label(Haubtfenster, text="Wilkommen am Brutschrank!", width=60, height=4)
lab1["font"]="Arial 20 italic"
lab2 = Label(Haubtfenster, text="Bitte wählen sie das zu brühtende Geflügel aus!", width=60, height=3) #Text in Fenster
lab2["font"]="Courier 12 bold"
lt = time.localtime()
lab3 = Label(Haubtfenster, text="Datum: {0:02d}.{1:02d}.{2:4d}".format(lt[2], lt[1], lt[0]), width=20, height=2) #Text in Fenster
lab3["font"]="Courier 10 bold"
lt = time.localtime()
lab4 = Label(Haubtfenster, text="Uhrzeit: {0:02d}:{1:02d}:{2:2d}".format(lt[3], lt[4], lt[5]), width=20, height=2) #Text in Fenster
lab4["font"]="Courier 10 bold"
b1 = Button(frame1, text="Wachteln", command=wechsleFarbe1, width=10, height=2, fg="#FF0000")
b2 = Button(frame1, text="Hühner", command=wechsleFarbe2, width=10, height=2, fg="#FF0000")
b3 = Button(frame1, text="Enten/Gänse", command=wechsleFarbe3, width=10, height=2, fg="#FF0000")
b4 = Button(frame1, text="Puten", command=wechsleFarbe4, width=10, height=2, fg="#FF0000")
lab1.grid(row=0, column=2) #side=LEFT(Lings),side=RIGHT(rechts),side=BOTTOM(unten),side=TOP(oben)
lab2.grid(row=1, column=2)
lab3.grid(row=2, column=2)
lab4.grid(row=3, column=2)
b1.grid(row=4, column=0)
b2.grid(row=5, column=0)
b3.grid(row=6, column=0)
b4.grid(row=7, column=0)
frame1.grid(row=7, column=2)
Haubtfenster.mainloop()
mit der Datei will ich die End sprechenden Programme auswählen
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 09:05
von DasIngo
wenn ich den Startbutton drücke passiert Garnichts das ist ja das Problem es kommt nicht mal eine Fehlermeldung
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 09:12
von DasIngo
Ich muss dazu sagen ich bin kompletter Neueinsteiger in Sachen Programmieren ich wühle mich durch Google und YouTube und versuche mir alles wichtige beizubringen
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 09:47
von BlackJack
@DasIngo: Wenn Du das Programm mit dem `subprocess.call()`-Aufruf von einer Konsole aus startest und auf die Schaltfläche klickst, was wird dann auf der Konsole ausgegeben? Nichts?
Welches von den gezeigten Quelltexten ist denn ``/home/pi/GrafiktestBeenden``? Ist das ausführbar? Also hat dass das „executable bit“ im Dateisystem gesetzt? Und gibt die erste Zeile in der Datei auch das passende Programm zum Ausführen an? In Deinem letzten Quelltext dürfte das beispielsweise nicht der Fall sein. Wenn man das Startet, sollte man einen `ImportError` von Python 2 bekommen, weil das `tkinter` nicht importieren kann.
Allgemeine Anmerkungen: Lass die Sternchenimporte bleiben. Und vor GUI-Programmierung sollte man objektorientiere Programmierung drauf haben, die braucht man nämlich bei der GUI-Programmierung. Das Du das alles auf Modulebene schreibst und die Funktionen einfach so auf Variablen ausserhalb zugreifen, wird schnell unübersichtlich und fehleranfällig.
Durchnummerierte Namen sind ein „code smell“. Man will dann in der Regel bessere Namen wählen, oder gar keine einzelnen Namen sondern die Werte in eine Datenstruktur stecken. Meistens eine Liste. Bei den nummerierten `wechsleFarbe*()`-”Funktionen” möchte man entweder Namen wählen die dem Leser verraten warum die Farbe gewechselt wird, oder wenn man sich den Inhalt der Funktionen anschaut, gar nicht vier verschiedene Funktionen schreiben, die nahezu das gleiche machen. Da schreibt man eine Funktion die das Widget von dem die Farbe geändert werden soll als Argument übergeben bekommt. Und das ``return`` macht keinen Sinn. Am Ende einer Funktion wird auch ohne ein ``return`` zum Aufrufer zurückgekehrt.
Bei `subprocess` sollte man so gut wie niemals ``shell=True`` verwenden. Nur wenn man tatsächlich eine Shell zwischen dem eigenen Programm und dem extern gestarteten benötigt.
Haupt schreibt man nicht mit 'b' und Links nicht mit 'g'.
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 10:09
von DasIngo
also der erst Quelltext ist GrafiktestBeenden, wenn ich subprocess.call() in der Konsole eingebe kommt ein Syntaxfehler beim unerwarteten Wort
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 10:12
von BlackJack
@DasIngo: Natürlich kannst Du keinen Python-Quelltext in einer Shell eingeben. Du sollst von dort das Programm starten das diesen Aufruf enthält. Damit Du siehst was für ein Problem/Fehler in dem Programm ist.
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 10:17
von DasIngo
und wie bekomme ich das Programm gestartet also ich habe ja nun gefühlt schon das gesamte Internet durchsucht um das raus zubekommen aber es will einfach nicht klappen das ich das Programm aus einem anderen Programm gestartet bekommen
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 10:36
von snafu
Wenn man will, dass ein Python-Programm ein weiteres Python-Programm in einem eigenen Interpreter startet, dann ist dies mit subprocess.call([sys.executable, 'pfad/zum/programm.py']) möglich.
Ich denke aber, dass hier eigentlich nach etwas anderem gesucht wird. Eventuell hilft das import-Statement.
Wobei ich das tatsächliche Vorhaben noch nicht wirklich durchschaut habe.
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 10:38
von Sirius3
@DasIngo: Du machst eine Konsole auf, wechselst in das Verzeichnis /home/pi und tippst ./GrafiktestBeenden ein. Das wird wahrscheinlich nicht funktionieren. Bei ./GrafiktestBeenden.py wirst Du hoffentlich mehr Glück haben und eine längere Fehlermeldung bekommen.
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 11:05
von DasIngo
das Vorhaben sol sein das ich einen Startbildschirm(Grafikfenster) habe zur Auswahl von 4 verschiedenen Programmen und wenn ich die Auswahl getroffen habe und mit einem Button bestätige soll sich das eigentliche Hauptprogramm öffnen
Re: Datei Ausführbar machen und Ausführen
Verfasst: Donnerstag 9. März 2017, 11:16
von DasIngo
also mit dem subprocess.call([sys.executable, 'pfad/zum/programm.py']) hat es geklappt erst mal danke dann kann ich mal weiter basteln und mal schauen wo ich wieder hängen bleibe aber erst mal danke an alle für die Hilfe es ist doch echt schwer so als kompletter Neueinsteiger sich da durchzuwurschteln ist doch mehr was man wissen muss als ich im Vorfeld dachte