【问题标题】:Catching "Cancel" in Tkinter在 Tkinter 中捕获“取消”
【发布时间】:2022-01-20 10:40:15
【问题描述】:

我有一个脚本,它会打开一个提示窗口,让用户在执行其他一些任务之前选择一个目录。如果用户选择“取消”,我希望程序显示适当的消息并退出程序。

但是,我无法让它工作。这是我尝试过的:

import tkinter as tk
import pathlib
from tkinter import filedialog

print('\nScript Initialised\nOpening File Dialog Window...\n')
# Define Functions here
def chooseDir():
    print('Choose folder 1')
    global outputfolder
    outputfolder = pathlib.Path(filedialog.askdirectory(title="Output Folder", initialdir='C:\\'))
    if outputfolder == '.':
        print('No folder selected. Program exiting.')
        quit()
    root.withdraw()

def openFile():
    print('Choose folder 2')
    global inputfolder
    inputfolder = pathlib.Path(filedialog.askdirectory(title="Import Folder", initialdir='C:\\'))
    if inputfolder == '.':
        print('No folder selected. Program exiting.')
        quit()
    root.withdraw()

# Create Tkinter menu
root = tk.Tk()
root.withdraw()
openFile()
root.withdraw()
chooseDir()
root.destroy()
root.mainloop()

print(outputfolder)
print(inputfolder)

我还尝试了一个空字符串 '',但似乎没有在 if 语句中打印消息。

【问题讨论】:

  • 考虑打印该值以查看取消时的值
  • 我有,底部的2个打印语句表示用户单击“取消”的时间段。但是,这不会在 IF 中返回正确的消息。
  • @Bryan Oakley 那么你是如何捕捉到它的呢?如果我将其更改为空字符串,它仍然不起作用
  • 如果用户选择当前文件夹,则打印 No folder selected,这就是 if outputfolder == '.': 所做的

标签: python tkinter pathlib filedialog


【解决方案1】:

askdirectory 的定义行为是,如果您按下取消,则返回空字符串。你需要检查一下。您正在做的是在进行检查之前将该空字符串转换为 Path 对象。在您确认它不是空字符串之前,您不应该这样做。

path = filedialog.askdirectory(title="Output Folder", initialdir='C:\\')
if path == "":
    print("No folder selected. Program exiting.")
    quit()
outputfolder = pathlib.Path(path)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 2016-08-04
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多