我正在使用跨平台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()
答案 0 :(得分:0)
当filedialog.askopenfilename
被调用方法而不创建任何GUI本身时,它会调用基础widget.tk.call("tk_getOpenFile", **options)
,然后调用::tk::dialog::file::
。这似乎处理了文件对话框gui,tkinter
至少无法控制 。
也许一个好的解决方法是在流程持续时隐藏kivy窗口。