Python 刷新 GUI 以创建另一个输出
Python Refresh GUI to create another output
我对 Python 很陌生。我正在尝试创建一个从 Smartsheet sheet 打印数字然后删除它的应用程序。问题是我只能打印一次,一旦我再次点击 "Create" 按钮,它就会给出错误信息。我相信当我再次单击 "Create" 按钮时,它 returns 从 sheet 中删除的号码。谢谢!
{"response": {"statusCode": 404, "reason": "Not Found", "content": {"detail": {"ids": [3462338204985220], "type": "row"}, "errorCode": 1006, "message": "Not Found", "refId": "hcuqkioxqz46"}}}
这里是存储一串数字的sheet:
这是我的代码:
#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()
如当前所写,您的 conceptnum()
函数正在执行此操作:
for each row in the sheet ->
for each cell in the current row ->
...
delete the current row
因此,如果您的 sheet 包含不止一列,您的脚本将:
- 获取 sheet
的第一行
- 获取正在处理的行的第一个单元格的值
- 从 sheet
中删除行
- 获取正在处理的行的第二个单元格的值
- 从 sheet 中删除行 -> 此 删除行 请求(以及对正在处理的行中的每个附加 column/cell 的后续请求) return 会出现 "Not Found" 错误——因为该行不再存在于 sheet 中——您在读取第一个单元格值后将其删除。
假设您的 objective 是读取 sheet 第一行第一个单元格中的值,然后从 sheet 中删除该行,这里有一个函数这样做——请注意,我已经更改了函数名称和变量名称以遵循 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.'
编辑 2020 年 4 月 13 日:
您需要在每次 concept_num
函数运行时获取 sheet -- 这样 my_sheet
反映 sheet 的当前内容(即,不再包含之前函数 运行 时删除的行)。我相应地更新了上面的代码片段(即,在 concept_num
函数的顶部添加了 get sheet 调用)。我还在代码段的末尾添加了代码(使用 else
),以便在 Create 按钮时 sheet 不包含更多数字时相应地更新标签被点击。
我对 Python 很陌生。我正在尝试创建一个从 Smartsheet sheet 打印数字然后删除它的应用程序。问题是我只能打印一次,一旦我再次点击 "Create" 按钮,它就会给出错误信息。我相信当我再次单击 "Create" 按钮时,它 returns 从 sheet 中删除的号码。谢谢!
{"response": {"statusCode": 404, "reason": "Not Found", "content": {"detail": {"ids": [3462338204985220], "type": "row"}, "errorCode": 1006, "message": "Not Found", "refId": "hcuqkioxqz46"}}}
这里是存储一串数字的sheet:
这是我的代码:
#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()
如当前所写,您的 conceptnum()
函数正在执行此操作:
for each row in the sheet ->
for each cell in the current row ->
...
delete the current row
因此,如果您的 sheet 包含不止一列,您的脚本将:
- 获取 sheet 的第一行
- 获取正在处理的行的第一个单元格的值
- 从 sheet 中删除行
- 获取正在处理的行的第二个单元格的值
- 从 sheet 中删除行 -> 此 删除行 请求(以及对正在处理的行中的每个附加 column/cell 的后续请求) return 会出现 "Not Found" 错误——因为该行不再存在于 sheet 中——您在读取第一个单元格值后将其删除。
假设您的 objective 是读取 sheet 第一行第一个单元格中的值,然后从 sheet 中删除该行,这里有一个函数这样做——请注意,我已经更改了函数名称和变量名称以遵循 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.'
编辑 2020 年 4 月 13 日:
您需要在每次 concept_num
函数运行时获取 sheet -- 这样 my_sheet
反映 sheet 的当前内容(即,不再包含之前函数 运行 时删除的行)。我相应地更新了上面的代码片段(即,在 concept_num
函数的顶部添加了 get sheet 调用)。我还在代码段的末尾添加了代码(使用 else
),以便在 Create 按钮时 sheet 不包含更多数字时相应地更新标签被点击。