要求如下:
图标: 使用17APLab3自己画的图标
菜单: 动态设计一个菜单控制动态改变图标(3选1单选),在四个位置显示文字(复选),“关于”
加速键: 每个菜单项都有加速键
消息框: 改变图标前确认是否要修改
选择图标3时复选菜单灰化
代码如下:
#_*_coding:utf-8_*_ import wx import os class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, u"17APLab4:WX资源基本使用", size=(800, 600)) self.SetBackgroundColour(u"Gray") self.menuBar = wx.MenuBar() self.panel = wx.Panel(self,-1) self.icon1 = wx.Icon(name=os.path.join(os.path.dirname(__file__),'icon1.ico'), type=wx.BITMAP_TYPE_ICO) self.icon2 = wx.Icon(name=os.path.join(os.path.dirname(__file__),'icon2.ico'), type=wx.BITMAP_TYPE_ICO) self.icon3 = wx.Icon(name=os.path.join(os.path.dirname(__file__),'icon3.ico'), type=wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon1) self.IconWord = wx.StaticText(self.panel, -1, u"", pos=(100, 100)) self.IconWord.SetLabel(u"当前使用的图标是:图标1") self.IconWord.SetFont(wx.Font(15, wx.SWISS, wx.NORMAL, wx.BOLD, False)) menu = wx.Menu() menu.Append(wx.ID_EXIT, u"Exit\tCtrl+Shift+Delete", u"Exit this simple sample") self.Bind(wx.EVT_MENU, self.OnClose, id=wx.ID_EXIT) self.menuBar.Append(menu, u"&File") self.IconList = [self.icon1,self.icon2,self.icon3] self.icon = wx.Menu() for num in range(3): self.icon.Append(num+201, u"图标%d\tCtrl+%d"%(num+1,num+1), u"将图标更换成icon%d.ico"%(num+1), wx.ITEM_RADIO) self.Bind(wx.EVT_MENU_RANGE, self.OnIcon,id=201,id2=203) self.IconEnsured = 201 self.menuBar.Append(self.icon, u"图标(&I)") self.menuBar.Check(self.IconEnsured,True) control = wx.Menu() for num in range(4): control.Append(num+301, u"显示%d\tCtrl+Shift+%d"%(num+1,num+1), u"改变显示的文字", wx.ITEM_CHECK) self.menuBar.Append(control, u"显示(&D)") self.Bind(wx.EVT_MENU_RANGE, self.OnIndicate,id=301,id2=304) self.Indicate = [] for num in range(4): self.Indicate.append(wx.StaticText(self.panel, -1, u"", pos=((1+num%2)*200,(1+num/2)*200))) self.Indicate[num].SetFont(wx.Font(15, wx.SWISS, wx.NORMAL, wx.BOLD, False)) self.IndicateControl = [False,False,False,False] menu = wx.Menu() IdAbout = menu.Append(-1, u"程序信息\tF1", u"点击查看程序信息") # bind the menu event to an event handler self.Bind(wx.EVT_MENU, self.OnHelp, IdAbout) # and put the menu on the menubar self.menuBar.Append(menu, u"关于(&A)") self.SetMenuBar(self.menuBar) # self.AcceleratorTable = [] # self.AcceleratorTable.Append((wx.ACCEL_CTRL,ord('1'),201)) # MyAccelerator=wx.AcceleratorTable([ (wx.ACCEL_CTRL,ord('1'),201), # (wx.ACCEL_CTRL,ord('2'),202), # (wx.ACCEL_CTRL,ord('3'),203) # (wx.ACCEL_CTRL+wx.ACCEL_SHIFT,ord('1'),301), # (wx.ACCEL_CTRL+wx.ACCEL_SHIFT,ord('2'),302), # (wx.ACCEL_CTRL+wx.ACCEL_SHIFT,ord('3'),303), # (wx.ACCEL_CTRL+wx.ACCEL_SHIFT,ord('4'),304)]) # self.SetAcceleratorTable(MyAccelerator) self.CreateStatusBar() self.Bind(wx.EVT_PAINT, self.OnPaint) def OnIcon(self, evt): IconIdSelected = evt.GetId() if wx.MessageBox(u"确定要修改么?", u"Confirmation", wx.YES_NO | wx.ICON_INFORMATION, self) == wx.YES: self.IconEnsured = IconIdSelected self.SetIcon(self.IconList[self.IconEnsured-201]) self.IconWord.SetLabel(u"当前使用的图标是:图标"+str(self.IconEnsured-200)) if IconIdSelected == 203: self.GetMenuBar().EnableTop(2,False) else: self.GetMenuBar().EnableTop(2,True) else: self.menuBar.Check(self.IconEnsured, True) self.Refresh() def OnIndicate(self, evt): IndicateIdSelected = evt.GetId()-301 self.IndicateControl[IndicateIdSelected] = not self.IndicateControl[IndicateIdSelected] if(self.IndicateControl[IndicateIdSelected]): self.Indicate[IndicateIdSelected].SetLabel(u"显示"+str(IndicateIdSelected+1)) else: self.Indicate[IndicateIdSelected].SetLabel(u"") self.Refresh() def OnHelp(self, evt): wx.MessageBox(u"17APLab4:WX资源基本使用\n图标、菜单、加速键、消息框\n\n\ 作者:1017510****\n姓名:XXX", u"17APLab4(WX)", wx.OK | wx.ICON_INFORMATION, self) def OnClose(self, evt): self.Close() if __name__ == '__main__': app = wx.App() frame = MyFrame() frame.Show(True) app.MainLoop()
好像python会根据文字自己加上快捷键……所以代码中的快捷键好像没有必要加了,所以注释掉了