首页 > 解决方案 > 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 很陌生。

标签: pythonpython-3.xtkinter

解决方案


推荐阅读