17APLab4:图标、菜单、加速键、消息框 python

要求如下:

图标: 使用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会根据文字自己加上快捷键……所以代码中的快捷键好像没有必要加了,所以注释掉了

猜你喜欢

转载自www.cnblogs.com/ecnu/p/10663380.html