如何在wxPython FilePickerCtrl文本框中键入文本而不会收到错误?

时间:2018-06-02 00:33:30

标签: python-3.x wxpython wxpython-phoenix

我有一个基于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的新手并且显然在这里做错了什么,但似乎无法找到一个如何以正确的方式做到这一点的例子。

1 个答案:

答案 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)