tkinter os.path.isfile、os.path.exists 不起作用并冻结应用程序

tkinter os.path.isfile, os.path.exists doesn't work and freeze the app

我刚刚在 python 中用 tkinter 制作了一个小程序来制作一些图。 我正在尝试让应用程序创建不与前一个文件重叠的 png 文件。 就像,如果它存在,将其重命名为 ~ (1).png 有点像。

但是当我 运行 os.path.isfileos.path.exists 时,应用程序就死机了。就像,没完没了的沙漏转动着说没有回应,你知道的。

所以,这就是我用按钮绑定的功能。

def get_information_S():
    global nation_list, checked_list, output, year_menu, auto_flag, df
    year = year_menu.get()
    checked_list.sort()
    nations = []
    if auto_flag == 0:
        for n in range(len(nation_list)):
            nations.append(nation_list[n][0].get())
        
    else:
        pass
        
    if len(year) == 0:
        output_log("연도를 선택해주세요.\n")
    elif len(checked_list) == 0:
        output_log("hs코드를 선택해주세요.\n")
    else:
        output_log("\n\n분석 연도 : "+str(year)+"\n분석 품목 : "+str(checked_list)+"\n분석 국가 : "+str(nations)+"\n분석을 실시했습니다.\n")

        for x in range(len(checked_list)):
            os.makedirs("result", exist_ok=True)
            os.makedirs("result\single", exist_ok=True)
            os.makedirs("result\single\hs_"+str(checked_list[x]),exist_ok = True)
    
            df_test = df[df.hs6==int(checked_list[x])]
            df_test = df_test[df_test.year==int(year)]
            
            file_loc = "result\single\hs_"+str(checked_list[x])+"\hs_"+str(checked_list[x])+"_"+str(year)+'.png'

            f = -1
            while True:
                f+= 1
                if os.path.isfile(file_loc) == True:
                    if f == 0:
                        file_loc = file_loc.replace('_.png','_('+str(f)+').png')
                    else:
                        file_loc = file_loc.replace('('+str(f-1)+')','('+str(f)+')')
                    continue
                else:
                    break
                    
                    
            plain_graph(df_test, file_loc, checked_list[x], nations)

嗯,这是我第一次接触 GUI。 有什么方法可以使用 os.path.isfile 或 os.path.exists 吗?或者任何绕行? 谢谢!

file_loc的初始值类似于"result\single\hs_xxxx_2021.png"(假设year为2021),那么在while循环的第一次迭代中,if f == 0将是评估为 True

file_loc = file_loc.replace('_.png','_('+str(f)+').png')

将被执行,但不会替换任何内容,因为 _.pngfile_loc 中未找到,因此 file_loc 保留为初始值并且 continue 行将继续到下一次迭代。由于file_loc不变而f增加,else部分

file_loc = file_loc.replace('('+str(f-1)+')','('+str(f)+')')

将被执行,但由于在 file_loc.

中未找到搜索模式,因此不会替换任何内容

然后每次迭代都会出现相同的结果,并使 while 循环成为无限循环。

因此上述行应更改为:

file_loc = file_loc.replace('.png','('+str(f)+').png')