【问题标题】:Confirmation message repeats in every iteration确认消息在每次迭代中重复
【发布时间】: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


【解决方案1】:

问题:结束循环,然后显示确认消息

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

【讨论】:

  • 如果您添加一些解释性文字,这个答案会更好。否则,我们必须逐行和逐个字符地阅读,以了解您所做的不同。
  • @BryanOakley 我已更改为comiunity wiki,欢迎添加“一些解释性文字”。跨度>
  • 我不想尝试充分理解您的答案来做到这一点(这就是重点)。我只是想让你知道你的答案并不像你想象的那么明显。本网站不鼓励仅使用代码回答。
猜你喜欢
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多