我有一个基于wxPython的程序,我使用FilePickerCtrl创建一个文件选择界面:
class MainFrame (wx.Frame):
...
def __init__(self, parent):
self.filePicker = wx.FilePickerCtrl(self, wx.ID_ANY, path = wx.EmptyString,
message = "Select a file", wildcard = "*.m",
pos = wx.DefaultPosition,
size = wx.DefaultSize,
style = wx.FLP_OPEN|wx.FLP_USE_TEXTCTRL)
self.Bind(wx.EVT_FILEPICKER_CHANGED, self.onFilePicker,
id = self.filePicker.GetId())
...
def onFilePicker(self, event):
self.resetOnOpen(event)
path = self.filePicker.GetPath()
self.openFile(event, path)
self.modifyHistory(event, path)
选择文件的按钮工作正常,我可以按预期选择文件。但是只要我在按钮旁边的文本框中输入一个字符,我就会得到一个例外:[Errno 2] No such file or directory
。它似乎正在尝试立即找到该文件,而不是等待用户完成键入路径。 (如果操作系统相关,则会在macOS 10.13上发生。)
让用户在框中键入路径的正确方法是什么(如果他们更喜欢键入路径而不是单击文件浏览按钮)?
我是wxPython的新手并且显然在这里做错了什么,但似乎无法找到一个如何以正确的方式做到这一点的例子。
答案 0 :(得分:0)
至少在Linux上,wx.FLP_USE_TEXTCTRL
导致每个键按下事件都会触发,我认为它对于其他操作系统是相同的。
确保您import os
然后更改onFilePicker
例程以检查文件是否存在。
def onFilePicker(self, event):
self.resetOnOpen(event)
path = self.filePicker.GetPath()
if not os.path.isfile(path):
return
self.openFile(event, path)
self.modifyHistory(event, path)