Как исправить 'NameError: имя' imgpath 'не определено' ошибка в Python3 и tkinter, чтобы показать картинку - PullRequest
0 голосов
/ 08 октября 2019

Я хочу показать текущую фазу луны в tkinter на сегодня или на конкретную дату. Когда я запускаю код, я получаю сообщение об ошибке: «NameError: имя« imgpath »не определено». Я понимаю, что я должен сначала нажать кнопку. Как я могу установить переменную "imgpath" в глобальную переменную.

Я хочу изменить изображение при выборе другой даты.

from tkinter import *
import ephem
from datetime import date, datetime
fenster = Tk()
def button_action():
    station = ephem.Observer()
    dates = dateeingabe.get()
    if (dates == ""):
        station.date = datetime.utcnow()
    else:
        station.date = dateeingabe.get()
    #Mondphase
    Moon = ephem.Moon()
    Moon.compute(station)
    drei = round(Moon.phase, 0)
    eins = ephem.next_full_moon(station.date)
    zwei = ephem.next_new_moon (station.date)
    if drei == 0:
        phasen = int(0)
    elif drei == 100:
        phasen = int(100)
    elif (ephem.next_full_moon(station.date) > ephem.next_new_moon(station.date)):
        phasen = int(100-drei+100)
    else:
        phasen = int(drei)

    imgpath = str("/home/user/moon/"+str(phasen)+".png")

pic = PhotoImage(file=imgpath)
picz = Label(fenster, image=pic)
dateeingabe = Entry(fenster, bd=5, width=40)
start_button = Button(fenster, text="Start", command=button_action)
dateeingabe.grid(row = 1, column = 1)
start_button.grid(row = 2, column = 1)
picz.grid(row = 3, column = 1)
fenster.mainloop()

1 Ответ

2 голосов
/ 08 октября 2019

Ваша программа выполняется сверху вниз, поэтому, когда вы пытаетесь установить путь к imgpath в

pic = PhotoImage(file=imgpath)

Она выдает ошибку, потому что imgpath определяется после вызова button_action в этом коде, двумя строками ниже:

start_button = Button(fenster, text="Start", command=button_action)

Чтобы преобразовать imgpath в глобальную переменную, вы можете объявить ее так:

global imgpath

Хотя это не решит вашу проблему, так как вы вызываете PhotoImage до того, каквызывая button_action.

Может быть, попробуйте переместить этот код ниже кода кнопки?

Надеюсь, это поможет!

...