class StartpageWindow(wx.Frame): """Main class of sc2mafia the start page, the create game page. All GUI logic is here. """ def __init__(self, parent, id, title, style): """Construct the GUI from config file, and bind GUI events to their handlers. """ # 读取sc2mafia.cfg self.readFromCfg() # 调用基类的构造函数 wx.Frame.__init__(self, parent, wx.ID_ANY, title, size=self.framesize, style=style) # 加载资源 # self.resin = Resin(os.path.join(homepath, # 'res', self.prefer.getValue("iconset"))) self.resin = Resin() # 图标 self.SetIcon(self.resin.getIcon("notalon")) # 提示 self.tips = wx.CreateFileTipProvider("Tips.txt", 0) self.showtips = int(self.config.get("other", "showtips")) if self.showtips: wx.CallAfter(self.ShowTips) # 显示Tips的同时显示主界面 # self.ShowTips() # 与上面相反,显示Tips之后才显示主界面 # 创建MenuBar self.createMenuBar() # 创建ToolBar self.createToolBar() # 创建StatusBar self.createStatusBar() # 创建主显示栏 self.createMainWindow() # 绑定关闭窗口的方法 self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) # 创建TaskBarIcon self.tbIcon = tbIcon(self) # -----------------创建主框架的相关函数------------------ # def readFromCfg(self): """读取配置文件 """ self.config = Config(os.path.join(homepath, "sc2mafia.cfg")) self.framesize = (int(self.config.get("frame", "width")), int(self.config.get("frame", "height"))) def menuData(self): """菜单项数据 """ return ( (u"程序", (u"退出", u"退出程序", self.OnCloseWindow)), ( u"员工档案", (u"新建", u"在远程服务器新建一个员工档案", self.OnCreateStaff), (u"修改", u"修改一个员工档案", self.OnModifyStaff), (u"查看", u"查看所有员工档案", self.OnDisplayStaff), (u"筛选", u"筛选员工档案", self.OnFilterStaff), ), (u"工资", (u"工资单发送", "用邮件发送工资单", self.OnMailSalary)), (u"其他", (u"报销系统", u"在这里登录报销系统", self.OnOpenExpAccHtml)), (u"工具", (u"通讯录", u"快速查询通讯录的小工具", self.OnSearchAddr)), ( u"帮助", (u"用户手册", u"用户手册", self.OnManual), ("", "", ""), (u"版权", u"本软件的版权信息", self.OnCopyRight), (u"关于作者", u"本软件作者的相关信息", self.OnAuthor), (u"关于本软件", u"本软件的相关信息", self.OnAbout), ), ) def createMenuBar(self): """创建菜单栏 """ menuBar = wx.MenuBar() for eachMenuData in self.menuData(): menuLabel = eachMenuData[0] menuItems = eachMenuData[1:] menuBar.Append(self.createMenu(menuItems), menuLabel) self.SetMenuBar(menuBar) def createMenu(self, menuData): """创建一个菜单 --从创建菜单栏函数中抽象出来的函数 """ menu = wx.Menu() for eachLabel, eachStatus, eachHandler in menuData: if not eachLabel: menu.AppendSeparator() continue menuItem = menu.Append(-1, eachLabel, eachStatus) self.Bind(wx.EVT_MENU, eachHandler, menuItem) return menu def toolBarData(self): """工具栏数据 """ return ( (u"创建", "new.bmp", u"新建一个员工档案", self.OnCreateStaff), # (u"修改", self.OnModifyStaff), (u"查看", "display.bmp", u"浏览", self.OnDisplayStaff), (u"筛选", "search.bmp", u"筛选", self.OnFilterStaff), ("", "", "", ""), (u"通讯录", "addr.bmp", u"搜索通讯录", self.OnSearchAddr), ) def createToolBar(self): """创建工具栏 """ toolBar = self.CreateToolBar() for each in self.toolBarData(): self.createSimpleTool(toolBar, *each) toolBar.Realize() def createSimpleTool(self, toolbar, label, filename, help, handler): """创建一个工具按钮 --从创建工具栏函数中抽象出来的函数 """ if not label: toolbar.AddSeparator() return bmp = wx.Image(filename, wx.BITMAP_TYPE_BMP).ConvertToBitmap() tool = toolbar.AddSimpleTool(-1, bmp, label, help) self.Bind(wx.EVT_MENU, handler, tool) def createMainWindow(self): """创建主显示窗口 """ pass # 显示每日提示 def ShowTips(self): """Shows the tips window on startup; returns False if the option to turn off tips is checked. """ # constructs the tip (wx.ShowTip), which returns whether or not the # user checked the 'show tips' box if wx.ShowTip(None, self.tips, True): btmp = 1 print 1 else: btmp = 0 print 0 self.config.set("other", "showtips", btmp) return self.config.get("other", "showtips") # ----------------------主框架的事件响应函数------------------------# def OnCreateStaff(self, event): pass def OnModifyStaff(self, event): pass def OnDisplayStaff(self, event): pass def OnFilterStaff(self, event): pass def OnMailSalary(self, event): pass def OnOpenExpAccHtml(self, event): pass def OnSearchAddr(self, event): pass def OnManual(self, event): pass def OnCopyRight(self, event): pass def OnAuthor(self, event): pass def OnAbout(self, event): pass def createStatusBar(self): self.statusBar = self.CreateStatusBar() self.statusBar.SetFieldsCount(3) self.statusBar.SetStatusWidths([-1, -2, -3]) # Sash位置变动 def OnSashPosChanged(self, event): """Handler for when the splitter sash, who divided the `tree` and the `content`, is moved. """ pass # pos = self.splitter.GetSashPosition() # self.config.setValue("sashposition", pos) def OnSelChanged(self): pass # 关闭主框架,清理资源 # TODO:devo def OnCloseWindow(self, event): self.tbIcon.Destroy() self.Destroy()
import time import datetime import base64 from config.config import Config if __name__ == "__main__": if len(sys.argv) != 3: print '''Usage: %s option value OPTIONS: ip: ip address (need restart) port: port number (need restart) ''' % sys.argv[0] sys.exit() data_path = os.path.join(os.path.dirname(__file__), 'data') config = Config(data_path + '/config.ini') option, value = sys.argv[1:] if option == 'ip': if value != '*' and not is_valid_ip(value): print 'Error: %s is not a valid IP address' % value sys.exit(-1) config.set('server', 'ip', value) elif option == 'port': port = int(value) if not port > 0 and port < 65535: print 'Error: port number should between 0 and 65535' sys.exit(-1) config.set('server', 'port', value)