在wxpython文件对话框中处理多个条件的正确方法是什么?

时间:2015-07-01 00:12:49

标签: wxpython filedialog

我的wxpython GUI有一个打开FileDialog的方法:

def open_filedlg(self,event):
    dlg = wx.FileDialog(self, "Choose XYZ file", getcwd(), "",
             "XYZ files (*.dat)|*.dat|(*.xyz)|*.xyz", wx.OPEN)
    if dlg.ShowModal() == wx.ID_OK:
         self.xyz_source=str(dlg.GetPath())
         self.fname_txt_ctl.SetValue(self.xyz_source)
         dlg.Destroy()
         return
    if dlg.ShowModal() == wx.ID_CANCEL:
         dlg.Destroy()
         return

如果我想取消,我必须按两次“取消”按钮。如果我颠倒条件的顺序,取消工作正常,但我必须按两次“打开”按钮才能获得文件名。使用“elif”而不是第二个“if”不会改变行为。这样做的正确方法是什么?感谢。

2 个答案:

答案 0 :(得分:3)

对于更新版本的wxPython(2.8.11+),我会使用上下文管理器,如下所示:

def open_filedlg(self,event):
    with wx.FileDialog(self, "Choose XYZ file", getcwd(), "",
             "XYZ files (*.dat)|*.dat|(*.xyz)|*.xyz", wx.OPEN) as dlg:
        dlgResult = dlg.ShowModal()
        if dlgResult == wx.ID_OK:
            self.xyz_source=str(dlg.GetPath())
            self.fname_txt_ctl.SetValue(self.xyz_source)
            return
        else:
            return
        #elif dlgResult == wx.ID_CANCEL:
            #return

'with'上下文管理器将自动调用dlg.destroy()。

答案 1 :(得分:2)

问题是,您打开对话框两次(每次'dlg.ShowModal'一次)。

尝试类似

的内容
dialogStatus = dlg.ShowModal()
if dialogStatus == wx.ID_OK:
    ...