17APLab4:圖標、菜單、加速鍵、消息框 python
阿新 • • 發佈:2019-04-07
main %d The onpaint box append int ebo delete
要求如下:
圖標: 使用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會根據文字自己加上快捷鍵……所以代碼中的快捷鍵好像沒有必要加了,所以註釋掉了
17APLab4:圖標、菜單、加速鍵、消息框 python