Python Refre sh GUI для создания другого вывода - PullRequest
0 голосов
/ 12 апреля 2020

Я очень новичок в Python. Я пытаюсь создать приложение, которое печатает число из листа Smartsheet, а затем удаляет его. Проблема в том, что я могу распечатать его только один раз, после того как я снова нажму кнопку «Создать», появится сообщение об ошибке. Я полагаю, когда я нажимаю кнопку «Создать» снова, он возвращает удаленный номер с листа. Спасибо!

{"response": {"statusCode": 404, "reason": "Not Found", "content": {"detail": {"ids": [3462338204985220], "type": "row"}, "errorCode": 1006, "message": "Not Found", "refId": "hcuqkioxqz46"}}}

Вот лист с номером серии: Screenshot of sheet that stores a series if number

Вот мой код:

#Smartsheet client access token
smartsheet_client = smartsheet.Smartsheet('access token')

#Order Dashboard sheet ID
MySheet=smartsheet_client.Sheets.get_sheet(sheet_id)


def conceptnum():
    n=1
    for Myrow in MySheet.rows:
        while n==1:
            for Mycell in Myrow.cells:
                row_ids=Myrow.id
                label1['text']=int(Mycell.value)
                label2['text']="Your concept number is created" 
                smartsheet_client.Sheets.delete_rows(
                sheet_id,                       # sheet_id
                row_ids)     # row_ids
            n=n-1


Height=100
Width=200

root=tk.Tk()

canvas=tk.Canvas(root, height=Height, width=Width)
canvas.pack()

frame=tk.Frame(root, bg="grey")
frame.place(relx=0.05, rely=0.3, relwidth=0.9, relheight=0.4)

button=tk.Button(root, text="Create",command=conceptnum)
button.pack(side='bottom')

label1=tk.Label(frame,font=15)
label1.place(relx=0.1, rely=0.1,relwidth=0.8, relheight=0.8)

label2=tk.Label(root)
label2.place(relwidth=1,relheight=0.2)

root.mainloop()  

1 Ответ

1 голос
/ 13 апреля 2020

Как написано в настоящее время, ваша функция conceptnum() делает это:

for each row in the sheet -> 
  for each cell in the current row ->
    ...
    delete the current row

Итак, если ваш лист содержит более одного столбца, ваш скрипт будет:

  • get в первой строке листа
  • получим значение первой ячейки обрабатываемой строки
  • удалим строку из листа
  • получим значение второй ячейки обрабатываемая строка
  • удалить строку из листа -> этот запрос удаления строки (и последующий запрос для каждого дополнительного столбца / ячейки в обрабатываемой строке) вернет "Не Обнаружена "ошибка - поскольку эта строка больше не существует на листе - вы удалили ее после считывания значения первой ячейки.

Предполагая, что ваша цель состоит в чтении значения в первой ячейке в первой строке листа, а затем удалите эту строку из листа, вот функция, которая сделает это - обратите внимание, что я изменил имя функции и имена переменных, чтобы следовать стилю Python (строчные буквы) с подчеркиванием):

def concept_num():

    # get sheet
    my_sheet = smartsheet_client.Sheets.get_sheet(sheet_id)

    # initialize row_id
    row_id = None

    for row in my_sheet.rows:
        # get the ID of the current (first) row
        row_id = row.id

        # get the Cell object for the first cell of the current (first) row
        cell = row.cells[0]

        # set labels
        label1['text'] = int(cell.value)
        label2['text'] = 'Your concept number is created' 

        # exit the 'for' loop (so that only the first row is processed)
        break

    # delete the row that was just processed
    if row_id != None:
        smartsheet_client.Sheets.delete_rows(sheet_id, row_id)
    else:
        label1['text'] = 'n/a'
        label2['text'] = 'Concept number not found.'

РЕДАКТИРОВАТЬ 4/13/2020:

При каждом запуске функции concept_num необходимо извлекать листы, чтобы my_sheet отражает текущее содержимое листа (т. Е. Больше не содержит строк, которые были удалены, когда функция выполнялась ранее). Я соответствующим образом обновил приведенный выше фрагмент кода (то есть добавил вызов get sheet в верхней части функции concept_num). Я также добавил код в конце фрагмента (используя else), чтобы соответствующим образом обновить метки, если на листе больше нет чисел при нажатии кнопки Создать .

...