Kleine Python Frage

09/04/2015 03:40 Benjihz#1
Moin,
Bin dabei für mein rPi ein kleines Python Script für ein Internetradio zu schreiben.
Nun da ich python n00b bin und alles was ich heute Nacht geschrieben habe durch rumprobieren zustande bringen konnte benötige ich nun Hilfe.
Mein Code:
Code:
from tkinter import *
import os

main = Tk()
main.title("Internetradio")
main.geometry("400x600")
image1=PhotoImage(file="hr3.png")
image2=PhotoImage(file="youfm.png")
image3=PhotoImage(file="pause.png")
image4=PhotoImage(file="plus.png")
image5=PhotoImage(file="minus.png")


a=Button(main,image=image1,command= os.system("taskkill /pid 4744"))
b=Button(main,image=image2)
c=Button(main,image=image3)
d=Button(main,image=image4)
e=Button(main,image=image5)

a.pack()
b.pack()
c.pack()
d.pack()
e.pack()

mainloop()
Wenn ich das Script ausführe wird direkt der Prozess beendet OHNE das ich auf den Button drücke. Wieso? Ich verstehe das nicht. Vielleicht ist es auch einfach zu spät^^

MfG
09/04/2015 19:09 xXKonaXx#2
Du musst die Bilddateien ins .gif Format konvertieren.
Öffne die Bilddatei mit z.B. mspaint und speichere sie einfach als .gif ab.
Dann sollte es laufen.
09/04/2015 19:39 warfley#3
Quote:
Originally Posted by xXKonaXx View Post
Du musst die Bilddateien ins .gif Format konvertieren.
Öffne die Bilddatei mit z.B. mspaint und speichere sie einfach als .gif ab.
Dann sollte es laufen.
Ein Bild in gif zu converten ist nie der richtige weg, wenn überhaupt ein sehr schlechter workauround.

Ring Ring, die 2000er rufen an sie wollen ihr veraltetes unnützes bildformat wieder haben
09/05/2015 02:14 Benjihz#4
Naja was hat das Format des Bildes damit Zutun das der Prozess direkt beendet wird wenn ich das Programm starte.
09/05/2015 19:48 xXKonaXx#5
Quote:
Originally Posted by warfley View Post
Ein Bild in gif zu converten ist nie der richtige weg, wenn überhaupt ein sehr schlechter workauround.

Die Klasse PhotoImage unterstützt meines Wissens nur das .gif Format.

Quote:
Originally Posted by Benjihz View Post
Naja was hat das Format des Bildes damit Zutun das der Prozess direkt beendet wird wenn ich das Programm starte.
Versuch es einfach.
09/05/2015 22:30 Benjihz#6
Quote:
Originally Posted by xXKonaXx View Post
Die Klasse PhotoImage unterstützt meines Wissens nur das .gif Format.



Versuch es einfach.
Danke für den Vorschlag, funktioniert leider dennoch nicht.
Der Prozess wird wieder direkt beendet ohne das der Button gedrückt wird.

Code:
from tkinter import *
import os

main = Tk()
main.title("Internetradio")
main.geometry("400x600")
image1=PhotoImage(file="hr3.gif")
image2=PhotoImage(file="youfm.png")
image3=PhotoImage(file="pause.png")
image4=PhotoImage(file="plus.png")
image5=PhotoImage(file="minus.png")


a=Button(main,image=image1,command= os.system("taskkill /pid 4644"))
b=Button(main,image=image2)
c=Button(main,image=image3)
d=Button(main,image=image4)
e=Button(main,image=image5)

a.pack()
b.pack()
c.pack()
d.pack()
e.pack()

mainloop()
09/05/2015 23:31 .SkyneT.#7
Ein bisschen Eigeninitiative ist beim Programmieren immer hilfreich.

So nun zu ner Antwort:
Als erstes googelt man nach dem Problem ich hab mal "tkinter photoimage png" eingegeben. Das erste Ergebnis.
[Only registered and activated users can see links. Click Here To Register...]

Also .png wird nicht unterstützt. Also verwenden wir KEINE .png files.
Quote:
image2=PhotoImage(file="youfm.png") <-- PNG
image3=PhotoImage(file="pause.png") <-- PNG
image4=PhotoImage(file="plus.png") <-- PNG
image5=PhotoImage(file="minus.png") <-- PNG
Sobald das Programm zu einer dieser Zeilen kommt wird vermutlich ne Exception
geworfen, und das Programm wird geschlossen.

Und nochwas:
Quote:
"taskkill /pid 4644"
Viel Glück damit, die Prozess ID ist nicht fest vergeben, und kann sich ändern.
Der Prozess mit der ID 4644 könnte alles sein. Vielleicht beendet es dein Programm
vielleicht löst es aber auch den 3ten Weltkrieg aus, weiß man nicht.

Quote:
"taskkill /IM """Prozessname.exe""" "
Hiermit sollte das Ergebnis etwas konstanter sein.
09/05/2015 23:49 Benjihz#8
Quote:
Originally Posted by .SkyneT. View Post
Ein bisschen Eigeninitiative ist beim Programmieren immer hilfreich.

So nun zu ner Antwort:
Als erstes googelt man nach dem Problem ich hab mal "tkinter photoimage png" eingegeben. Das erste Ergebnis.
[Only registered and activated users can see links. Click Here To Register...]

Also .png wird nicht unterstützt. Also verwenden wir KEINE .png files.

Sobald das Programm zu einer dieser Zeilen kommt wird vermutlich ne Exception
geworfen, und das Programm wird geschlossen.

Und nochwas:

Viel Glück damit, die Prozess ID ist nicht fest vergeben, und kann sich ändern.
Der Prozess mit der ID 4644 könnte alles sein. Vielleicht beendet es dein Programm
vielleicht löst es aber auch den 3ten Weltkrieg aus, weiß man nicht.


Hiermit sollte das Ergebnis etwas konstanter sein.
Hallo, vielen dank für deine Mühe.
Ich hab jetzt alle Bilder ins GIF Format konvertiert. Das die PID variabel ist ist mir klar.
Leider tritt immernoch das selbe Problem auf. Der Befehl zum schließen des Prozesses wird schon beim Start des Programmes ausgeführt und nicht erst wenn der Button gedrückt wird.

Code:
from tkinter import *
import os

main = Tk()
main.title("Internetradio")
main.geometry("400x600")
image1=PhotoImage(file="hr3.gif")
image2=PhotoImage(file="youfm.gif")
image3=PhotoImage(file="pause.gif")
image4=PhotoImage(file="plus.gif")
image5=PhotoImage(file="minus.gif")


a=Button(main,image=image1,command= os.system("taskkill /IM chrome.exe"))
b=Button(main,image=image2)
c=Button(main,image=image3)
d=Button(main,image=image4)
e=Button(main,image=image5)

a.pack()
b.pack()
c.pack()
d.pack()
e.pack()

mainloop()
09/06/2015 02:30 .SkyneT.#9
Oh, hab jetzt erst dein eigentliches Problem richtig verstanden ^^
Hier z.B
Quote:
Naja was hat das Format des Bildes damit Zutun das der Prozess direkt beendet wird wenn ich das Programm starte.
dachte ich aus irgendeinem Grund das dieser "Prozess" dein Programm ist.


Naja, dann mal zu dem eigentlichen Problem:

Fehler liegt hier:
Quote:
command= os.system("taskkill /IM chrome.exe")
müsste so aussehen:
Code:
def killchrome():
    os.system("taskkill /F /IM chrome.exe")

a=Button(main,image=image1,command=killchrome)
09/06/2015 22:52 Benjihz#10
Quote:
Originally Posted by .SkyneT. View Post
Oh, hab jetzt erst dein eigentliches Problem richtig verstanden ^^
Hier z.B

dachte ich aus irgendeinem Grund das dieser "Prozess" dein Programm ist.


Naja, dann mal zu dem eigentlichen Problem:

Fehler liegt hier:

müsste so aussehen:
Code:
def killchrome():
    os.system("taskkill /F /IM chrome.exe")

a=Button(main,image=image1,command=killchrome)
Hat soweit alles funktioniert, danke :)
Ich möchte das ganze jetzt auch unter Linux(Raspbian) ausführen. Unter Windows läuft das Script perfekt, nur unter Raspian leider nicht.
Die Fehlermeldung aus der Python-Shell:
[Only registered and activated users can see links. Click Here To Register...]

Ist es evtl möglich das tkinter nachinstalliert werden muss?

MfG

Code:
from tkinter import *
import os

main = Tk()
main.title("Internetradio")
main.geometry("400x600")
image1=PhotoImage(file="hr3.gif")
image2=PhotoImage(file="youfm.gif")
image3=PhotoImage(file="pause.gif")
image4=PhotoImage(file="plus.gif")
image5=PhotoImage(file="minus.gif")

def playhrdrei():
    os.system("mpc play 1")

def playyoufm():
    os.system("mpc play 2")

def stop():
    os.system("mpc stop")
a=Button(main,image=image1,command=playhrdrei)
b=Button(main,image=image2,command=playyoufm)
c=Button(main,image=image3,command=stop)
d=Button(main,image=image4)
e=Button(main,image=image5)

a.pack()
b.pack()
c.pack()
d.pack()
e.pack()

mainloop()
09/07/2015 13:06 xXKonaXx#11
Bitte die [Only registered and activated users can see links. Click Here To Register...] nutzen, diese unterstützt fast alle Bildformate und du sparst dir das ganze hin und her konvertieren.

Beispiel für dein Programm:
Code:
from PIL import Image, ImageTk

image = Image.open("pause.jpg")
pause_image = ImageTk.PhotoImage(image)
e = Button(main,image=pause_image)
09/07/2015 16:59 Benjihz#12
Vielen Dank für eure Hilfe. Läuft jetzt :)