wxPython用于保存文件选取器的错误文件对话框?
问题描述:
考虑这个例子(Ubuntu的14.04,Python的2.7.6,蟒蛇,wxgtk2.8:AMD64 /信赖2.8.12.1):wxPython用于保存文件选取器的错误文件对话框?
import wxversion
wxversion.select("2.8")
import wx, wx.html
import sys
class Frame(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.file_picker_inpdffilepath = wx.FilePickerCtrl(self, wx.ID_ANY, "", "Open PDF file:", "PDF files (*.pdf)|*.pdf", None, None, wx.FLP_DEFAULT_STYLE | wx.FLP_USE_TEXTCTRL)
self.file_picker_outpdffilepath = wx.FilePickerCtrl(self, wx.ID_ANY, "", "Choose output PDF file name:", "PDF files (*.pdf)|*.pdf", None, None, wx.FLP_SAVE | wx.FLP_USE_TEXTCTRL | wx.FLP_OVERWRITE_PROMPT)
sizer_vmain_app = wx.BoxSizer(wx.VERTICAL)
sizer_vmain_app.Add(self.file_picker_inpdffilepath, 1, wx.EXPAND, 0)
sizer_vmain_app.Add(self.file_picker_outpdffilepath, 1, wx.EXPAND, 0)
self.SetSizer(sizer_vmain_app)
self.Layout()
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
app_frame = Frame(None, wx.ID_ANY, "")
app.SetTopWindow(app_frame)
app_frame.Show()
app.MainLoop()
这里我有两个文件选择器,一个应设置为文件加载(wx.FLP_LOAD,默认样式的一部分),另一个用于保存(wx.FLP_SAVE)。当我跑,我得到:
然后我点击 “(无...” 按钮,我得到这个文件打开对话框:
...但是,当我点击“浏览”按钮(应该引发保存文件的系统对话框)时,它会引发与加载完全相同的操作(不管我是否使用wx.FLP_USE_TEXTCTRL)!我会期望,是一个文件对话框,有一个文本输入小部件(所以你可以选择,然后重新命名),像这样说一个Firefox浏览器的页面另存为...提出:
有没有什么办法,我可能会迫使这种对话显示,在wx.FLP_SAVE wx.FilePickerCtrl的“浏览”,当点击 - 和如果是这样,怎么样?
答
我从来没有使用过FilePickerCtrl
。相反,我一直使用wx.FileDialog
。然而,我只是用wxPython 3.0.2 Classic测试了你的代码,并且它按预期工作,所以我同意这可能是旧版本中的一个错误。
import wx, wx.html
import sys
class Frame(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.file_picker_inpdffilepath = wx.FilePickerCtrl(self, wx.ID_ANY, "", "Open PDF file:", "PDF files (*.pdf)|*.pdf", None, None, wx.FLP_DEFAULT_STYLE | wx.FLP_USE_TEXTCTRL)
self.file_picker_outpdffilepath = wx.Button(self, label='Save')
self.file_picker_outpdffilepath.Bind(wx.EVT_BUTTON, self.onSave)
sizer_vmain_app = wx.BoxSizer(wx.VERTICAL)
sizer_vmain_app.Add(self.file_picker_inpdffilepath, 1, wx.EXPAND, 0)
sizer_vmain_app.Add(self.file_picker_outpdffilepath, 1, wx.EXPAND, 0)
self.SetSizer(sizer_vmain_app)
self.Layout()
def onSave(self, event):
path = None
dlg = wx.FileDialog(self,
message="Choose output PDF file name:",
defaultDir='',
wildcard="PDF files (*.pdf)|*.pdf",
style=wx.FD_SAVE | wx.FLP_USE_TEXTCTRL | wx.FLP_OVERWRITE_PROMPT)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
dlg.Destroy()
return path
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
app_frame = Frame(None, wx.ID_ANY, "")
app.SetTopWindow(app_frame)
app_frame.Show()
app.MainLoop()
你尝试演示:
如果你被卡住的旧版本,那么你可能会因为它使用
wx.FileDialog
应该找到以下修改后的代码是否有帮助?另外,为什么不更新wxPython到最新版本? – Igor谢谢@Igor - 我该如何尝试演示?这是我在这个操作系统上的wxPython版本,我想支持它... – sdaau
请检查存储库 - 它应该包含软件包列表。某处应该有像wxPython-demo这样的东西。另外,好奇 - 如果您尝试运行解释器并发出“导入wx”,然后出现“wx.FileDialog(.....)”,其中“...”是传递给FilePicker的参数会发生什么? – Igor