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.isfile
或 os.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')
将被执行,但不会替换任何内容,因为 _.png
在 file_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')
我刚刚在 python 中用 tkinter 制作了一个小程序来制作一些图。 我正在尝试让应用程序创建不与前一个文件重叠的 png 文件。 就像,如果它存在,将其重命名为 ~ (1).png 有点像。
但是当我 运行 os.path.isfile
或 os.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')
将被执行,但不会替换任何内容,因为 _.png
在 file_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')