【发布时间】:2021-06-10 12:12:10
【问题描述】:
我有以下代码:
def update_contact_from_crm_to_import_in_365():
sql = "SELECT * FROM CRM_PRIMARY WHERE copy_to_365 = 'To update' ORDER BY CRM_PRIMARY.id DESC"
search_result = my_cursor.execute(sql)
search_result = my_cursor.fetchall()
sql_result.clear()
sql_result.append(search_result)
Filter(sql_result[0])
# Get id of sql result to pass them
list_get_selected_id.clear()
for res in (sql_result):
for id in (res):
list_get_selected_id.append(id[0])
time.sleep(5)
validate1 = messagebox.askquestion("Update ?", "Launch update ?")
if validate1 == 'yes':
open_dynamics_365_full_contact_list()
我的问题是Filter(sql_result[0]) 似乎从update_contact_from_crm_to_import_in_365 函数的最后开始(在messagebox 之后)
到目前为止,当我调用 update_contact_from_crm_to_import_in_365() 时,它会显示消息框,一旦得到答复,它就会调用 Filter()。
但我想打电话给Filter,等待 5 秒过滤器继续并结束,然后显示消息框。
请问我该怎么做?
我读过关于 Threading 的文章,但我只是 Python 的初学者,所以对我来说有点复杂。
提前致谢
【问题讨论】:
-
过滤器是做什么的?你能把它的代码贴在 OP 里吗?
-
如果是
tkinter,那么你可以使用root.after(5000, function_name)在5000ms(5s)后运行函数。而function_name表示没有()的函数名称(所谓的callback) -
你有错误的缩进,所以我们不能说这段代码是如何工作的。编辑问题,再次输入代码,选择代码并使用
Ctrl+K正确格式化代码。 -
@tstoev : Filter() 实际上是将 SQL 查询的结果提供给小部件 (tk.treeview)。到目前为止一切正常,但树视图仅在消息框被回答后刷新。就好像消息框正在阻止代码在后台运行。但由于 Filter() 调用在消息框之前,我不明白为什么......
-
@furas:感谢您的回复,但我正试图做相反的事情,我不想延迟 Filter() 调用,试图给它一些时间继续但弹出消息框当我调用 update_contact_from_crm_to_import_in_365 时,windows 几乎立即出现。
标签: python function tkinter timing