wxPython菜单事件-新文件

时间:2018-09-11 04:33:16

标签: python user-interface wxpython

我正在尝试使用基本菜单功能(例如“新建”,“打开”和“保存”)制作一个简单的wxpython GUI程序。 我可以使用正确的标签创建GUI,但是当我单击“新建文件”时,该程序不会打开新窗口。我认为这是将“新文件”功能绑定到菜单的方式。

这是我的代码:

import wx

class david(wx.Frame):

  def __init__(self,parent,id):
    wx.Frame.__init__(self,parent,id,'wxPython Window',size=(300,200))
    panel=wx.Panel(self)

    status=self.CreateStatusBar()
    menubar=wx.MenuBar()
    file=wx.Menu()
    edit=wx.Menu()
    file.Append(wx.NewId(),"New File","This opens a new file")
    file.Append(wx.NewId(),"Open...","This opens an existing file")
    file.Append(wx.NewId(),"Save","Save the current file")
    menubar.Append(file,"File")
    menubar.Append(edit,"Edit")
    self.Bind(wx.EVT_MENU, self.NewFile, id=wx.ID_NEW)
    self.SetMenuBar(menubar)

  def NewFile(self,parent,id):
    wx.Frame.__init__(self,parent,id,'wxPython Window',size=(300,200))
    panel=wx.Panel(self)

    status=self.CreateStatusBar()
    menubar=wx.MenuBar()
    file=wx.Menu()
    edit=wx.Menu()
    file.Append(wx.NewId(),"New File","This opens a new file")
    file.Append(wx.NewId(),"Open...","This opens an existing file")
    file.Append(wx.NewId(),"Save","Save the current file")
    menubar.Append(file,"File")
    menubar.Append(edit,"Edit")
    self.SetMenuBar(menubar)


if __name__=='__main__':
  app=wx.App()
  frame=david(parent=None,id=-1)
  frame.Show()
  app.MainLoop()

1 个答案:

答案 0 :(得分:0)

看起来您使用Bind的方式不正确。 id=wx.ID_NEW可以做到这一点,以便将事件绑定到不引用任何内容的新ID。但是,您希望使用文件菜单栏项的ID,当您使用Append方法时可以获取该ID。

  ...
  newFileID = file.Append(wx.NewId(), "New File", "This opens a new file")
  ...
  self.Bind(wx.EVT_MENU, self.NewFile, newFileID)
  ...

此外,事件处理程序方法NewFile应该只有两个参数event,如here所述。 现在打开一个新窗口,有很多方法可以做到,但是最简单的方法是使用已经编写的框架。注意我正在使用的功能参数。

  def NewFile(self, event):
    frame = david(parent=None, id=-1)
    frame.Show()

有关样式的注释:在分配值和括号中的值时,请尝试使用空格。 有关wxPython的良好介绍,请参见this