我有以下按钮事件处理程序:
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开始,我似乎无法关闭并手动清理它。
答案 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()
您可能还会发现以下文章有用: