我正在尝试使用基本菜单功能(例如“新建”,“打开”和“保存”)制作一个简单的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()
答案 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。