【问题标题】:WxPython File DialogsWxPython 文件对话框
【发布时间】:2013-03-18 09:45:06
【问题描述】:

我正在使用 wxPython 构建一个应用程序,并且我在博客的某处看到您不能在同一应用程序上同时使用 wx.FD_OPEN 和 wx.FD_SAVE,这是真的吗?

如果这是真的,这是否意味着我必须搬到 Tkinter?

编辑:我目前拥有的。

      SAVE_FILE_ID = wx.NewId()
      self.Bind(wx.EVT_MENU, self.saveFile, id=SAVE_FILE_ID)

      LOAD_FILE_ID = wx.NewId()
      self.Bind(wx.EVT_MENU, self.loadFile, id=LOAD_FILE_ID)

      accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL,  ord('O'), LOAD_FILE_ID ),
                                       (wx.ACCEL_CTRL,  ord('S'), SAVE_FILE_ID )])

      self.SetAcceleratorTable(accel_tbl)

      def saveFile(self, event):
        saveFileDialog = wx.FileDialog(self, "Save As", "", "", 
                                      "Python files (*.py)|*.py", 
                                      wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

        self.text.SaveFile(saveFileDialog.GetPath())
        event.Skip()

      def loadFile(self, event):
        openFileDialog = wx.FileDialog(self, "Open", "", "", 
                                      "Python files (*.py)|*.py", 
                                      wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)

        self.text.LoadFile(openFileDialog.GetPath())
        event.Skip()

【问题讨论】:

  • 1) 是的,that's true。 2)不是真的。为什么你这么想?打开和保存是用于不同目的的不同对话框
  • 打开和另存为在我的程序的同一个菜单中,我怎样才能通过我的加速器使两个对话框都工作?它不适用于加载,但可以用于保存,因为保存在我的代码中是第一位的。
  • @vjgaero 我想你误会了。您可以分开打开和保存对话框没有问题。这就是您在代码中所做的。你不能做的是一个打开和保存的对话框(即一个样式为wx.FD_OPEN | wx.FD_SAVE的对话框)

标签: python wxpython tkinter


【解决方案1】:

我不确定我是否理解问题所在。当我将此代码放入实际运行的东西中时,它对我来说很好:

import wx

class MyForm(wx.Frame):

    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial", size=(500,500))

        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        SAVE_FILE_ID = wx.NewId()
        self.Bind(wx.EVT_MENU, self.saveFile, id=SAVE_FILE_ID)

        LOAD_FILE_ID = wx.NewId()
        self.Bind(wx.EVT_MENU, self.loadFile, id=LOAD_FILE_ID)

        accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL,  ord('O'), LOAD_FILE_ID ),
                                         (wx.ACCEL_CTRL,  ord('S'), SAVE_FILE_ID )]
                                        )
        self.SetAcceleratorTable(accel_tbl)

    #----------------------------------------------------------------------
    def loadFile(self, event):
        openFileDialog = wx.FileDialog(self, "Open", "", "", 
                                       "Python files (*.py)|*.py", 
                                       wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
        openFileDialog.ShowModal()
        openFileDialog.GetPath()
        openFileDialog.Destroy()

    #----------------------------------------------------------------------
    def saveFile(self, event):
        saveFileDialog = wx.FileDialog(self, "Save As", "", "", 
                                       "Python files (*.py)|*.py", 
                                       wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
        saveFileDialog.ShowModal()
        saveFileDialog.GetPath()
        saveFileDialog.Destroy()

# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

我在 Windows 7 上使用 wxPython 2.8.12.1 和 Python 2.6.6

【讨论】:

  • 我比较了代码,我意识到我没有 .ShowModal() 欢呼。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多