可以与wx.DirDialog()一起使用语句

时间:2018-01-10 15:41:10

标签: python python-3.x modal-dialog wxpython

我有以下按钮事件处理程序:

def select_source_folder(self, event):
     with wx.DirDialog(self.panel,message="Choose Source Directory" style=wx.DD_DEFAULT_STYLE):
         if wx.DirDialog.ShowModal() == wx.ID_CANCEL:
              pass

我正在此页面上阅读有关wx.FileDialog的信息,而example则使用with语句。我知道我正在使用wx.DirDialog但是可以将with语句与wx.DirDialog一起使用吗?

我在尝试使用代码时遇到以下错误:

  

TypeError:DirDialog.ShowModal():未绑定方法的第一个参数   必须有'DirDialog'类型

this page开始,我似乎无法关闭并手动清理它。

1 个答案:

答案 0 :(得分:0)

这可能是一个错误。您可以在wxPython的网站上提交错误:https://github.com/wxWidgets/Phoenix/issues

请务必在执行此操作之前检查是否已经报告过此内容。

与此同时,您可以将wx.DirDialog子类化,并使其像上下文管理器一样工作。这是一个例子:

import wx

class ContextDirDialog(wx.DirDialog):

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.Destroy()


class MyPanel(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        btn = wx.Button(self, label='Choose Folder')
        btn.Bind(wx.EVT_BUTTON, self.select_source_folder)

    def select_source_folder(self, event):
        with ContextDirDialog(self, message="Choose Source Directory",
                              style=wx.DD_DEFAULT_STYLE) as dlg:
            if dlg.ShowModal() == wx.ID_CANCEL:
                print('You cancelled the dialog!')

class MyFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='Contexts')
        panel = MyPanel(self)
        self.Show()

if __name__== '__main__':
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

您可能还会发现以下文章有用: