#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. Мне нравится это быстрое решение на данный момент. Да, изображения повсюду, но, по крайней мере, они появляются! ха-ха, со временем я надеюсь использовать другую структуру и добавить все извлеченные данные в список, а затем просмотреть его