не удается повторить цикл в метке tkinter

#python #function #variables #tkinter #label

Вопрос:

Проблема: я пытаюсь получить список результатов с веб-сайта api freshdesk. Все это поставляется в формате json, и я должен использовать цикл for для извлечения конкретных данных, которые мне нужны.

Когда я использую цикл for и использую «печать», он работает, и я вижу всю необходимую информацию в командной строке IDE.

Пример:

 ticketresponse = requests.get(freshdeskticketsurl, auth = (freshdeskapi, freshdeskpassword))
ticket_json = ticketresponse.json()
lenghtofticket30 = (len(ticket_json))
print(f"Here are the number of tickets in the past 30 days: ", lenghtofticket30)

def myTicketstatusloop():
    for i in range(len(ticket_json)):
        ticketsubject_str = json.dumps(ticket_json[i]['subject'], indent=2,)
        ticketstatus_str = json.dumps(ticket_json[i]['status'], indent=2,)
        ticketcreationdate = json.dumps(ticket_json[i]['created_at'], indent=2,)
        ticketupdateddate = json.dumps(ticket_json[i]['updated_at'], indent=2)
        ticketstatusreplace_str = ticketstatus_str.replace("2", "Open")
        ticketstatusreplace_str = ticketstatus_str.replace("5", "Closed")
        print(ticketsubject_str)
        print(ticketstatusreplace_str)
        print(ticketcreationdate)
        print(ticketupdateddate)
        print("n")

myTicketstatusloop()
 

Результат:

 Here are the number of tickets in the past 30 days:  38
"Ensure M365 email is in outlook, setup wifi adapter, see why computer is slow"
Closed
"2021-03-03T20:08:54Z"
"2021-03-03T20:09:00Z"


"FW: Email DL List"
Closed
"2021-03-03T19:21:16Z"
"2021-03-03T19:28:29Z"


"knowb4 users"
2
"2021-03-03T17:38:39Z"
"2021-03-03T17:38:39Z"


"FW: EFT Payment scheduled 03 March 21 Account: MJJ0011A"
2
"2021-03-03T17:30:36Z"
"2021-03-03T17:35:34Z"
 

Изображение:

Однако, когда я пытаюсь получить то же значение внутри метки для tkinter, я получаю только первый результат.

Пример:

 ticketresponse = requests.get(freshdeskticketsurl, auth = (freshdeskapi, freshdeskpassword))
ticket_json = ticketresponse.json()
lenghtofticket30 = (len(ticket_json))
print(f"Here are the number of tickets in the past 30 days: ", lenghtofticket30)

def myTicketstatusloop():
    for i in range(len(ticket_json)):
        ticketsubject_str = json.dumps(ticket_json[i]['subject'], indent=2,)
        ticketstatus_str = json.dumps(ticket_json[i]['status'], indent=2,)
        ticketcreationdate = json.dumps(ticket_json[i]['created_at'], indent=2,)
        ticketupdateddate = json.dumps(ticket_json[i]['updated_at'], indent=2)
        ticketstatusreplace_str = ticketstatus_str.replace("2", "Open")
        ticketstatusreplace_str = ticketstatus_str.replace("5", "Closed")
        label1 = Label(homepage, text = ticketsubject_str   "n"   ticketstatusreplace_str   "n"   ticketcreationdate   "n"   ticketupdateddate)
        label1.grid(row=1, column=1)

homepage = Tk()
homepage.title("My first GUI")
# set size of window
homepage.geometry('1473x400')


    
    
myButton1 = Button(homepage, text="Tickets open", command=myTicketstatusloop, bg="black", fg="green", font='Helvetica 13 bold', padx=20, pady=20).grid(row=0, column=0)
myButton2 = Button(homepage, text="Tickets closed today", bg="black", fg="green", font='Helvetica 13 bold',padx=20, pady=20).grid(row=0, column=1)
myButton3 = Button(homepage, text="most reoccuring type of ticket", bg="black", fg="green", font='Helvetica 13 bold', padx=20, pady=20).grid(row=0, column=2)
myButton4 = Button(homepage, text="Average Hours this week", bg="black", fg="green", font='Helvetica 13 bold', padx=20, pady=20).grid(row=0, column=3)
myButton5 = Button(homepage, text="Todo-list", bg="black", fg="green", font='Helvetica 13 bold', padx=20, pady=20).grid(row=0, column=4)
myButton6 = Button(homepage, text="Intermedia", bg="black", fg="green", font='Helvetica 13 bold', padx=20, pady=20).grid(row=0, column=5)
myButton7 = Button(homepage, text="M365", bg="black", fg="green", font='Helvetica 13 bold', padx=20, pady=20).grid(row=0, column=6)
myButton8 = Button(homepage, text="Knowbe4", bg="black", fg="green", font='Helvetica 13 bold', padx=20, pady=20).grid(row=0, column=7)
myButton9 = Button(homepage, text="Ninja", bg="black", fg="green", font='Helvetica 13 bold', padx=20, pady=20).grid(row=0, column=8)


homepage.mainloop()
 

Результат:

 "FW: Alert - OnPointe Properties / JMark and Associates - CPDC02 - Disk Volume Free space for 'C:' is less than or equal to 10% from 2021-0..."
Closed
"2021-03-03T16:45:29Z"
"2021-03-03T19:20:45Z"
 

Изображение:

Я попробовал пару разных идей, но пока ничего не дает мне всех данных. Если у вас есть какие-либо идеи или предложения, дайте мне знать.

Спасибо всем!!

Комментарии:

1. Я думаю, это потому, что каждый раз, когда вы повторяете цикл, вы просто заменяете одну и ту же метку. Вместо этого попробуйте создавать новую метку для каждой итерации.

2. Я думаю, что это звучит правильно, но я не знаю, как это сделать. Я сейчас гуглю его.

3. Когда вы используете label1.grid(row=1, column=1) , вы всегда создаете одну и ту же метку в одном и том же месте. Было бы неплохо, если бы вы также могли сказать, как вы хотите расположить все метки. Пытаться: label1.grid(row=i, column=1) .

Ответ №1:

Быстрое решение: Если вы хотите отобразить все это вниз, просто увеличьте номер строки, например:

 label1.grid(row=i, column=1)
 

Если вам нужна другая структура, добавьте все эти извлеченные данные в список, а затем выполните цикл по требуемым строкам и столбцам, взяв элемент из списка.

Комментарии:

1. Мне нравится это быстрое решение на данный момент. Да, изображения повсюду, но, по крайней мере, они появляются! ха-ха, со временем я надеюсь использовать другую структуру и добавить все извлеченные данные в список, а затем просмотреть его