考虑这个例子(Ubuntu 14.04,Python 2.7.6,python-wxgtk2.8:amd64 / trusty 2.8.12.1):
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保存页面为...:
点击"浏览&#34>是否有任何方法可以强制显示此类对话框一个wx.FLP_SAVE wx.FilePickerCtrl - 若然,怎么样?
答案 0 :(得分:0)
我从未使用过FilePickerCtrl
。相反,我一直使用wx.FileDialog
。但是我刚刚使用wxPython 3.0.2 Classic测试了你的代码,它按预期工作,所以我同意这可能是旧版本中的一个错误。
如果您坚持使用旧版本,那么您可能会发现以下修改后的代码非常有用,因为它使用wx.FileDialog
代替:
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()