CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
jackfrued

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: jackfrued/Python-100-Days
Path: blob/master/Day01-15/code/Day13/singlethread2.py
Views: 729
1
"""
2
不使用多线程的情况 - 耗时间的任务阻塞主事件循环
3
4
Version: 0.1
5
Author: 骆昊
6
Date: 2018-03-20
7
"""
8
9
import time
10
import tkinter
11
import tkinter.messagebox
12
13
14
def download():
15
# 模拟下载任务需要花费10秒钟时间
16
time.sleep(10)
17
tkinter.messagebox.showinfo('提示', '下载完成!')
18
19
20
def show_about():
21
tkinter.messagebox.showinfo('关于', '作者: 骆昊(v1.0)')
22
23
24
def main():
25
top = tkinter.Tk()
26
top.title('单线程')
27
top.geometry('200x150')
28
top.wm_attributes('-topmost', True)
29
30
panel = tkinter.Frame(top)
31
button1 = tkinter.Button(panel, text='下载', command=download)
32
button1.pack(side='left')
33
button2 = tkinter.Button(panel, text='关于', command=show_about)
34
button2.pack(side='right')
35
panel.pack(side='bottom')
36
37
tkinter.mainloop()
38
39
40
if __name__ == '__main__':
41
main()
42
43
44
# 在不使用多线程的情况下 一旦点击下载按钮 由于该操作需要花费10秒中的时间
45
# 整个主消息循环也会被阻塞10秒钟无法响应其他的事件
46
# 事实上 对于没有因果关系的子任务 这种顺序执行的方式并不合理
47
48