主要包含两部分,一部分是菜单栏内容添加,包含子菜单,另一部分是绑定事件。
菜单栏添加
菜单栏的添加遵循一个原则,先创建菜单,再创建子菜单项,最后再将子菜单项加入到菜单中
值得注意的是 图片大小的改变(重点标注)
image = wx.Image(r'pic1.png', wx.BITMAP_TYPE_PNG)
# print('图片的尺寸为{0}x{1}'.format(image.GetWidth(),image.GetHeight()))
portion = 0.15
w = image.GetWidth() * portion
h = image.GetHeight() * portion
image.Rescale(w, h)
mypic = image.ConvertToBitmap()
# 创建 新建 菜单项
self.new = wx.MenuItem(fileMenu, wx.ID_NEW, '&新建\tCtrl+N')
self.new.SetBitmap(mypic)
菜单事件绑定
依然用到的是Bind,这里第一个参数为wx.EVT_MENU
代码
import wx.grid
import os
class Example(wx.Frame):
"""创建一个view菜单,它包括两个 Check 菜单项,这两个菜单项可以控制显示或隐藏状态栏和工具栏"""
def __init__(self):
wx.Frame.__init__(self, None, -1, size=(350, 300))
self.InitUI()
self.Show()
def InitUI(self):
menubar = wx.MenuBar()
# 文件菜单栏
fileMenu = wx.Menu()
image = wx.Image(r'pic1.png', wx.BITMAP_TYPE_PNG)
# print('图片的尺寸为{0}x{1}'.format(image.GetWidth(),image.GetHeight()))
portion = 0.15
w = image.GetWidth() * portion
h = image.GetHeight() * portion
image.Rescale(w, h)
# print('图片的尺寸为{0}x{1}'.format(image.GetWidth(), image.GetHeight()))
mypic = image.ConvertToBitmap()
# 创建 新建 菜单项
self.new = wx.MenuItem(fileMenu, wx.ID_NEW, '&新建\tCtrl+N')
self.new.SetBitmap(mypic)
fileMenu.Append(self.new)
# 创建 打开 菜单项
self.open = wx.MenuItem(fileMenu, wx.ID_OPEN, '&打开\tCtrl+O')
self.open.SetBitmap(mypic)
fileMenu.Append(self.open)
self.Bind(wx.EVT_MENU,self.OpenPdf,self.open)
# 创建 保存 菜单项
self.save = wx.MenuItem(fileMenu, wx.ID_SAVE, '&保存\tCtrl+S')
self.save.SetBitmap(mypic)
fileMenu.Append(self.save)
# 视图菜单栏
viewMenu = wx.Menu()
self.more = wx.MenuItem(viewMenu, wx.ID_ANY, '&更多...')
self.quit = wx.MenuItem(viewMenu, wx.ID_EXIT, '&退出\tCtrl+T')
self.Bind(wx.EVT_MENU, self.OnQuit, self.quit)
# 当应用开始的时候,状态栏和工具栏都应可见,所以使用 Check() 方法勾选 Check 菜单项
viewMenu.Append(self.more)
viewMenu.Append(self.quit)
menubar.Append(fileMenu, '&文件')
menubar.Append(viewMenu, '&帮助')
self.SetMenuBar(menubar)
self.toolbar = self.CreateToolBar()
self.SetSize((350, 250))
self.SetTitle('Check菜单项')
self.Centre()
self.Show(True)
def OpenPdf(self, event):
wildcard = 'All files(*.*)|*.*'
dialog = wx.FileDialog(None, 'select', os.getcwd(), '', wildcard, wx.FD_OPEN)
if dialog.ShowModal() == wx.ID_OK:
self.pathname = dialog.GetPath()
dialog.Destroy
def OnQuit(self, event):
self.Close()
if __name__ == '__main__':
app = wx.App()
frame = Example()
frame.Show()
app.MainLoop()