Ist es möglich, zwei Funktionen in einer Zeile auszufü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
AstroSloth
User
Beiträge: 3
Registriert: Montag 10. Juni 2019, 10:41
Kontaktdaten:

Hallo liebe Community, ich bin noch neu in Sachen Python, doch bin ich bereits dabei mir ein kleines Programm mit Python, PyEpehem und Tkinter zu schreiben.

Das Programm soll den Zweck erfüllen, wenn man den Längengrad sowie den Breitengrad und das gesuchte Objekt eingibt das es mir anzeigt wann dieses Objekt aufgeht, wo es gerade steht, wann es untergeht usw.

Standardmäßig funktioniert das importieren und ausgeben von Werten ja wie folgt:

Code: Alles auswählen

import ephem
stadt = ephem.Observer()
stadt.lat = '49.00000'
stadt.lon = '7.00000'
moonrise = ephem.Date(stadt.next_rising(ephem.Moon()))
print 'Mondaufgang: ' + str (ephem.localtime(moonrise))
Dann habe ich versucht in TKinter versucht den Befehl über eingegebene Koordnianten zu erzeugen. Das klappt einwandfrei.

Code: Alles auswählen

from Tkinter import *
import ephem
fenster = Tk()
fenster.title("Almanach")

#Eingabefeld
lon = Entry(fenster)
lat = Entry(fenster)


home = ephem.Observer()


def button_action():
    home = ephem.Observer()
    home.lon = lon.get()
    home.lat = lat.get()
    moonrise = ephem.Date(home.next_rising(ephem.Moon()))
    ephem.localtime(moonrise)
    print 'Mondaufgang: ' + str (ephem.localtime(moonrise))
        
welcom_button = Button(fenster, text="Klick me", command=button_action)

#Komponenten mit Position
lon.grid(row = 0, column = 1)
lat.grid(row = 1, column = 1)
welcom_button.grid(row = 1, column = 0)


#Dauerloop
fenster.mainloop()

Nur möchte ich mir ja nicht nur den Mond anzeigen lassen, sondern vielleicht auch Mars, Jupiter... Also dachte ich mir ich ergänze noch eine Spalte für die Objekte und ersetze das Wort "moon" durch die Variable obj.get() ersetzt. Ich dachte mir das funktioniert hier genau so wie bei dem Längen- und Breitengrad aber leider wäre das zu einfach gewesen :D

Code: Alles auswählen

from Tkinter import *
import ephem
fenster = Tk()
fenster.title("Almanach")

#Eingabefeld
lon = Entry(fenster)
lat = Entry(fenster)
obj = Entry(fenster)


home = ephem.Observer()


def button_action():
    home = ephem.Observer()
    home.lon = lon.get()
    home.lat = lat.get()
    obj.get()rise = ephem.Date(home.next_rising(ephem.obj.get()()))
    ephem.localtime(obj.get()rise)
    print 'Mondaufgang: ' + str (ephem.localtime(obj.get()rise))
        
welcom_button = Button(fenster, text="Klick me", command=button_action)

#Komponenten mit Position
lon.grid(row = 0, column = 1)
lat.grid(row = 1, column = 1)
obj.grid(row = 2, column = 1)
welcom_button.grid(row = 1, column = 0)


#Dauerloop
fenster.mainloop()
Jetzt erhalte ich diesen Fehler
File "b.py", line 19
obj.get()rise = ephem.Date(home.next_rising(ephem.obj.get()()))
^
SyntaxError: invalid syntax
Vielen Dank schon Mal im Voraus :)
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie soll denn das funktionieren? Gerade bei `ephem.obj` würde ja jede lokale Variable ein Modul kaputt machen können, z.B. bei `home.lon` sollte ja nach Deiner Logik `lon` durch das Entry-Feld ersetzt werden. Für den lokalen Variablennamen mußt Du ja gar nichts machen, der kann einfach ›raises‹ heißen. Und für die Übersetzung von dem Wert im Eingabefeld "moon" -> ephem.Moon bietet sich ein Wörterbuch an.
AstroSloth
User
Beiträge: 3
Registriert: Montag 10. Juni 2019, 10:41
Kontaktdaten:

Gibt es denn noch eine Möglichkeit dies anders zu lösen? Mein Ziel ist es ja nur das wenn ich im 3. Feld Beispielsweise "Moon", "Sun" eingebe", er aus den Stellen wo jetzt "obj.get()" steht eben dieses Moon oder Sun einsetzt und die Funktion funktioniert? Oder existiert ein Lösungsansatz mit dem ich mir das selbst erarbeiten kann?
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AstroSloth: Wie Sirius3 schon schrieb, wäre das naheliegendste ein Wörterbuch (`dict`) das Zeichenketten mit den Planeten/Objektnamen auf das entsprechende Attribut des `ephem`-Moduls abbildet.

Wobei das PyEphem deprecated ist und 2015 das letzte Release war. Ich weiss nicht ob man damit noch Software schreiben sollte. Mit Python 2.x auf jeden Fall nicht mehr, denn auch das ist am Ende seiner Zeit angekommen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
AstroSloth
User
Beiträge: 3
Registriert: Montag 10. Juni 2019, 10:41
Kontaktdaten:

Okay vielen Dank für eure Antworten. Jetzt habe ich einen Ansatz. Vielleicht schaue ich mich Mal nach Alternativen um. Nochmals vielen Dank!
Antworten