如果失去焦点,请关闭askopenfilename

时间:2017-12-29 00:17:03

标签: python user-interface tkinter cross-platform

我正在使用跨平台project来控制用python 2编写的CNC路由器,并使用kivy创建GUI。

总的来说,我喜欢kivy但是kivy文件选择器很慢,并且看起来不像大多数用户期望的那样。我想使用一个文件选择器,它具有大多数用户的原生外观,所以我正在使用tkinter askopenfilename()函数给我一个UI本机文件选择器。

这项工作正常,但如果用户点击文件选择器外部以将主程序置于前面,则文件选择器将保留在后台并且UI被锁定,因为askopenfilename()正在阻止。

如果失去焦点,有没有办法让askopenfilename()自动关闭?

感谢任何和所有帮助。

以下是代码:

def openFile(self):
    '''

    Open The Pop-up To Load A File

    Creates a new pop-up which can be used to open a file.

    '''

    root = Tk()
    root.withdraw() # we don't want a full GUI, so keep the root window from appearing
    initialDir = path.dirname(self.data.gcodeFile)
    if initialDir is "": 
        initialDir = path.expanduser('~')
    validExtensions = self.data.config.get('Ground Control Settings', 'validExtensions').replace(",", "")

    root.bind("<FocusOut>", self.app_lost_focus)

    filename = askopenfilename( parent=root, initialdir = initialDir, filetypes = (("Gcode files", validExtensions),("all files","*.*")), title = "Open Gcode File") # show an "Open" dialog box and return the path to the selected file

    if filename is not "":
        self.data.gcodeFile = filename
        self.data.config.set('Maslow Settings', 'openFile', str(self.data.gcodeFile))
        self.data.config.write()

    #close the parent popup
    self.parentWidget.close()

1 个答案:

答案 0 :(得分:0)

filedialog.askopenfilename被调用方法而不创建任何GUI本身时,它会调用基础widget.tk.call("tk_getOpenFile", **options),然后调用::tk::dialog::file::。这似乎处理了文件对话框gui,tkinter至少无法控制

也许一个好的解决方法是在流程持续时隐藏kivy窗口。