Python 确认消息在每次迭代中重复

Python 确认消息在每次迭代中重复,python,loops,if-statement,tkinter,Python,Loops,If Statement,Tkinter,我正在用Tkinter制作一个简单的GUI。 基本上,你指向一个目录,如果目录中有以“.WAV”结尾的文件夹,他会在每个文件夹中循环并删除“.WAV”后缀 我希望它结束循环,然后显示一条确认消息,但使用当前代码,程序会在重命名的每个文件夹上显示一条消息,使用户在每个文件夹上点击“OK” def execute(): directory = entry.get() for folder in os.listdir(directory): if folder.endswith(".WAV"

我正在用Tkinter制作一个简单的GUI。 基本上,你指向一个目录,如果目录中有以“.WAV”结尾的文件夹,他会在每个文件夹中循环并删除“.WAV”后缀

我希望它结束循环,然后显示一条确认消息,但使用当前代码,程序会在重命名的每个文件夹上显示一条消息,使用户在每个文件夹上点击“OK”

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”结尾的文件夹时,他会向我显示错误并向我显示确认信息,忽略break我会做的是开始一个空列表。如果我遇到一个没有
.wav
的文件夹,我会将该文件夹名称附加到列表中。在循环之后,我将使用if语句。如果该列表的长度>0,则显示错误(甚至可能包括导致错误的文件夹列表),否则,显示确认。这样你就不必中断,你可以完成所有的文件,除了那些没有
.wav
的文件。但是我不知道您的用例,所以这可能不起作用。另一种选择是将整个循环和确认消息放在一个try块中,而不是使用
break
,引发一个异常,然后捕获并显示错误消息。如果添加一些解释性文本,这个答案会更好。否则,我们必须逐行逐字阅读,看看你做了什么不同。@BryanOakley我已改为Comunity wiki,请随意添加“一些解释性文字”。我不想试图理解你的答案,以便做到这一点(这就是重点)。我只是想让你知道你的答案并不像你想象的那么明显。本网站不鼓励只使用代码的答案。
def execute():
    directory = entry.get()

    ok = None        
    for folder in os.listdir(directory):
        if folder.endswith(".WAV"):
            os.rename(os.path.join(directory, folder), os.path.join(directory, folder[:-4]))
            ok = True
        else:
            ok = False
            break

    if ok
        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.')