1. 程式人生 > >17APLab4:圖標、菜單、加速鍵、消息框 python

17APLab4:圖標、菜單、加速鍵、消息框 python

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