【发布时间】:2023-03-16 21:59:01
【问题描述】:
我正在用 Tkinter 制作一个简单的 GUI。 基本上你指向一个目录,如果该目录有以“.WAV”结尾的文件夹,他会遍历每个文件夹并删除“.WAV”后缀。
我希望它结束循环,然后显示一条确认消息,但使用当前代码,程序会为每个重命名的文件夹显示一条消息,使用户在每个文件夹上点击“确定”。
def execute():
directory = entry.get()
for folder in os.listdir(directory):
if folder.endswith(".WAV"):
os.rename(os.path.join(directory, folder), os.path.join(directory, folder[:-4]))
messagebox.showinfo("All folders renamed successfully!", "All folders were renamed successfully!")
else:
messagebox.showerror("Error renaming folders!", 'Make sure there's only folders ending in ".WAV" in the selected directory.')
break
【问题讨论】:
-
“我的循环中的代码在每个循环中发生” - 简单的答案是将您只希望在循环结束时发生的代码移动到循环之后。
-
@user1558604 好的,它解决了我的问题,但是现在当我没有任何以“.WAV”结尾的文件夹时,他向我显示了错误并显示了确认信息,忽略了中断跨度>
-
我要做的是开始一个空列表。如果我遇到没有
.wav的文件夹,我会将该文件夹名称附加到列表中。在循环之后,我会使用 if 语句。如果该列表的长度 > 0,则显示错误(甚至可能包括导致错误的文件夹列表),否则,显示确认。这样你就不必打破,你可以做所有的文件,除了那些没有.wav的文件。但我不知道你的用例,所以这可能行不通。 -
另一种选择是将整个循环和确认消息放在 try 块中,而不是使用
break,引发异常,然后捕获并显示错误消息。
标签: python loops if-statement tkinter