如何挂钩到Tkinters FileDialog?

时间:2015-09-26 14:40:38

标签: python python-3.x tkinter

使用profile = Selenium::WebDriver::Firefox::Profile.new profile['permissions.default.image'] = 2 browser = Watir::Browser.new(:firefox, :profile => profile) browser.goto url python 3我正在尝试创建一个文件对话框,让用户可以选择现有目录(tkinter)。

当他们选择exists=True时,我想检查该目录是否也可读,我可以获得文件锁定。由于我的程序的其余部分将依赖于对路径的读取访问,并且它的进程将花费很长时间。

乳清他们选择choose我希望对话框关闭。

File Dialogue

如果目录不是cancel,我希望文件对话框显示readable消息。单击askretry将返回以选择文件。点击Retry即可关闭对话框。

Ask Retry Dialogue

在我的第一次尝试中,我是Cancel的新手,我创建了这个:

tkinter

虽然不完美。它不会让你import os from tkinter import filedialog from tkinter import messagebox class OpenDialog(object): def __init__(self): self.directory_path = None self.dialog_title ="Photos Directory Selection" def ask_for_directory(self): while not self.directory_path: self.directory_path = filedialog.askdirectory(mustexist=True, title=self.dialog_title) if not os.access(os.path.dirname(self.directory_path), os.F_OK): self.directory_path = None if not messagebox.askretrycancel(title=self.dialog_title, message="Can't read directory."): break 文件对话。

但是,唉,我以为我可能会潜入文件对话本身......

我只是看不清楚如何干净地挂入FileDialogue类来干净地显示cancel对话并重复该过程。

filedialogue.py

如果有什么我遗失的请分享: - )

1 个答案:

答案 0 :(得分:-1)

这样可行,但有人看到递归调用的问题吗?

def ask_for_directory(self):
    self.directory_path = filedialog.askdirectory(mustexist=True, title=self.dialog_title)
    if self.directory_path:

        # Check that we have access to the path
        if not os.access(self.directory_path, os.R_OK):

            # If we don't have access
            if messagebox.askretrycancel(title=self.dialog_title, message="Can't read directory."):
                self.ask_for_directory()

编辑:

这是我的例子,但已经纠正工作......

def ask_for_directory(self):
    while not self.directory_path:
        self.directory_path = filedialog.askdirectory(mustexist=True, title=self.dialog_title)
        if self.directory_path:
            if not os.access(self.directory_path, os.R_OK):
                self.directory_path = None
                if not messagebox.askretrycancel(title=self.dialog_title, message="Can't read directory."):
                   break
        else:
            break