python - Tkinter GUI 仅对大量文件无响应
问题描述
我创建了一个简单的应用程序,它查看某个文件夹并根据用户输入连接所有文件(开始;日期 1 和结束日期;日期 2)。这是下面的代码片段;
root = Tk()
# main function to create and save a csv file
def csv(date1, date2, path_1, path_2):
extension = 'txt'
daterange = pd.date_range(date1, date2).tolist()
daterange_list = [date.strftime('%d-%b-%Y') for date in daterange]
progress['value'] = 5
root.update_idletasks()
time.sleep(5)
all_filenames = []
for i in range (len (daterange_list)):
for j in glob.glob('{}2*{}*.{}'.format(path_1, daterange_list[i], extension)):
all_filenames.append(j)
progress['value'] = 30
root.update_idletasks()
time.sleep(5)
csv_file = pd.concat([pd.read_csv(f, delimiter='\t') for f in all_filenames])
progress['value'] = 60
root.update_idletasks()
time.sleep(5)
csv_file.to_csv(os.path.join(path_2, '{}{}{}to{}{}{}.csv'.format(date1[0:2], date1[3:6], date1[-4:], date2[0:2], date2[3:6], date2[-4:])), index = False)
progress['value'] = 100
root.update_idletasks()
time.sleep(5)
# select directory that contain all the text files to concatenate
def mydir():
global work_dir
work_dir = askdirectory(title='Select Working Directory Folder')
myLabel = Label(root, text = work_dir)
myLabel.grid(row = 0, column = 1)
# select directory to save the file
def mydir2():
global down_dir
down_dir = askdirectory(title='Select Download Folder')
myLabel = Label(root, text = down_dir)
myLabel.grid(row = 1, column = 1)
global progress
# create buttons and user input areas
button_dir = Button(root, text = "Select Battery Directory:", command = mydir)
button_down = Button(root, text = "Select Download Directory:", command = mydir2)
start_date = Entry(root, width = 20)
end_date = Entry(root, width = 20)
submit_button = Button(root, text = "Submit", command = lambda: csv(start_date.get(), end_date.get(), work_dir, down_dir))
progress = Progressbar(root, orient = HORIZONTAL, length=100, mode='determinate')
# create button layout
.........
root.mainloop()
gui 非常适合连接少量文本文件,但是如果文件数量超过 30 个文件,gui 将变得无响应,但代码仍在后台运行。
我正在考虑实现线程,但我认为在这种情况下它不会有帮助吗?特别是如果没有要运行的后台进程。
有什么办法可以解决这个问题吗?任何帮助将不胜感激,因为我对 python 很陌生。
解决方案
推荐阅读
- jpa - 具有只有外键的表的实体设计
- android - 将地图划分到不同的区域Android Studio?
- c# - 如何在月历 C# 中手动设置特定的开始日期
- c# - 我想使用正则表达式从这个字符串 GRN/GSI/2017/7 中提取 7
- django - 使用 travis 编码环境变量的 Django 和 travis CI 密钥错误
- php - 在php中将1.5的值四舍五入到1?
- asp.net-mvc - 从表单 MVC 中获取价值
- python - 更有效地执行嵌套 python 循环
- postgresql - 如何接受 postgresql 中的任何日期?
- css - 如何使用 Angular 4 及以上版本的 webpack.config 将 sass 与编译集成到 css 中?