前面因为抓取数据,为了方便期间做了各界面,用到了wx,觉得很好用,所以最近几天专门看了一下wx的使用,并练习了一下。
代码:
import os,sys,re,time import wx,wx.xrc,wx.adv,wx.grid import json,math,random import subprocess,threading from win32api import GetSystemMetrics from faker import FakerAPP_ICON = '.\\favicon_test2.ico' APP_TITLE = '测试软件' nowtime1 = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) nowtime2 = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) nowunixtime = int(round(time.time() * 1000)) username = '' password = '' percent = 0.6 faker = Faker(locale='zh_CN') show_icon = False show_window = True myFrames = {} myFrame = ''abouttext = ''' import wxclass MyFrame(wx.Frame):def __init__(self, parent):wx.Frame.__init__(self, parent, -1, "多行文本框示例")panel = wx.Panel(self)# 创建多行文本框self.multi_text_ctrl = wx.TextCtrl(panel, style=wx.TE_MULTILINE)# 设置布局管理器sizer = wx.BoxSizer(wx.VERTICAL)sizer.Add(self.multi_text_ctrl, 1, wx.ALL|wx.EXPAND, 5)panel.SetSizer(sizer)if __name__ == "__main__":app = wx.App(False)frame = MyFrame(None)frame.Show(True)app.MainLoop() '''.strip()datas = [] for i in range(0, 1017):sex = random.randint(0,1)if sex == 0:name = faker.name_male()sex2 = '男'else:name = faker.name_female()sex2 = '女'datas.append([name,sex2,str(random.randint(1,99)),faker.email(),faker.company(),faker.address()])labelSize = (int(90*percent), int(45*percent)) textSize = (int(250*percent), int(45*percent)) buttonSize = (int(110*percent), int(45*percent)) imgSize = (int(1024*percent), int(768*percent)) lineHeight = int(45*percent)def getFileContent(file):fp = open(file, 'r', encoding='utf-8')res = fp.read()fp.close()return resdef saveFileContent(file, content):fp = open(file, 'w', encoding='utf-8')fp.write(content)fp.close()class FolderBookmarkTaskBarIcon(wx.adv.TaskBarIcon):MENU_ID1, MENU_ID2 = wx.NewIdRef(count=2)def __init__(self):super().__init__()self.SetIcon(wx.Icon(APP_ICON), APP_TITLE)self.Bind(wx.EVT_MENU, self.onShow, id=self.MENU_ID1)self.Bind(wx.EVT_MENU, self.onExit, id=self.MENU_ID2)def CreatePopupMenu(self):menu = wx.Menu()menu.Append(self.MENU_ID1, '显示隐藏')menu.Append(self.MENU_ID2, '退出')return menudef onShow(self, event):global show_window,myFrames,myFrameframe = myFrames[myFrame]if show_window == True:frame.Show(False)show_window = Falseelse:frame.Show(True)show_window = Truedef onExit(self, event):wx.Exit()class LoginFrame ( wx.Frame):sub_title = '登录'my_frame = 'login'def __init__( self, parent ):global percent,labelSize,textSize,buttonSize,lineHeight,username,show_window,myFrames,myFrame,show_iconwx.Frame.__init__ ( self, parent, id = wx.ID_ANY, style = wx.DEFAULT_FRAME_STYLE )labelFont = wx.Font(int(18*percent), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)labelColor = wx.Colour( 139, 69, 19 )#设置窗口位置,大小screen_width = GetSystemMetrics(0)screen_height = GetSystemMetrics(1)window_width = int(screen_width*percent)window_height = int(screen_height*percent)self.SetSize((window_width, window_height))position_x = (screen_width - window_width) // 2position_y = (screen_height - window_height) // 2self.SetPosition(wx.Point(position_x, position_y))#计算控件坐标positionx_label = (window_width - (labelSize[0] + textSize[0])) // 2positionx_text = positionx_label + labelSize[0]positionx_button = positionx_text + textSize[0] - buttonSize[0]positiony_label1 = (window_height - (labelSize[1]*3 + lineHeight*2)) // 2positiony_label2 = positiony_label1 + labelSize[1] + lineHeightpositiony_label3 = positiony_label1 + labelSize[1] + lineHeight + labelSize[1] + lineHeightself.usernameLabel = wx.StaticText(self, label='用户名:', size=labelSize)self.usernameLabel.SetPosition(wx.Point(positionx_label, positiony_label1))self.usernameLabel.SetFont(labelFont)self.usernameLabel.SetForegroundColour(labelColor)self.usernameInput = wx.TextCtrl(self, size=textSize)self.usernameInput.SetPosition(wx.Point(positionx_text, positiony_label1))self.usernameInput.SetValue("admin")self.passwordLabel = wx.StaticText(self, label='密码:', size=labelSize)self.passwordLabel.SetPosition(wx.Point(positionx_label, positiony_label2))self.passwordLabel.SetFont(labelFont)self.passwordLabel.SetForegroundColour(labelColor)self.passwordInput = wx.TextCtrl(self, style=wx.TE_PASSWORD, size=textSize)self.passwordInput.SetPosition(wx.Point(positionx_text, positiony_label2))self.passwordInput.SetValue("123456")self.loginButton = wx.Button( self, label='登录', size=buttonSize)self.loginButton.SetPosition(wx.Point(positionx_button, positiony_label3))self.loginButton.SetFont(labelFont)self.loginButton.SetForegroundColour(labelColor)self.loginButton.Bind( wx.EVT_BUTTON, self.login )self.SetWindowStyle(wx.STAY_ON_TOP | wx.CAPTION | wx.SYSTEM_MENU)self.SetTitle(APP_TITLE+'-'+self.sub_title)self.SetIcon(wx.Icon(APP_ICON))self.SetBackgroundColour( wx.Colour( 245, 222, 179 ) )self.Raise()self.Show(True)show_window = TruemyFrame = self.my_frameif not myFrame in myFrames:myFrames[myFrame] = self#显示iconif show_icon == False:FolderBookmarkTaskBarIcon()show_icon = True#绑定事件self.timer = wx.Timer(self)self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)self.timer.Start(3000)def OnTimer(self, event):thread_obj = threading.Thread(target=self.OnTimer1, args=(event, ))thread_obj.start()def OnTimer1(self, event):#设置窗口位置,大小return ;screen_width = GetSystemMetrics(0)screen_height = GetSystemMetrics(1)print('屏幕大小: %s*%s' % (screen_width, screen_height))(window_widthx, window_heightx) = self.GetSize()print('窗口大小: %s*%s' % (window_widthx, window_heightx))(position_xx, position_yy) = self.GetPosition()print('窗口位置: %s*%s' % (position_xx, position_yy))print()def login(self, event):global username, passwordusernameVal = self.usernameInput.GetValue()passwordVal = self.passwordInput.GetValue()if not usernameVal in ['admin', 'root'] or passwordVal != '123456':wx.MessageBox('用户名和密码不匹配')return Falseusername = usernameValpassword = passwordValself.Hide()mfObj = MainFrame(None)return Truedef __del__( self ):passclass MainFrame ( wx.Frame):sub_title = '首页'my_frame = 'main'def __init__( self, parent ):global percent,labelSize,textSize,buttonSize,imgSize,lineHeight,username,show_window,myFrames,myFramewx.Frame.__init__ ( self, parent, id = wx.ID_ANY, style = wx.DEFAULT_FRAME_STYLE )labelFont = wx.Font(int(18*percent), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)labelColor = wx.Colour( 139, 69, 19 )#设置窗口位置,大小screen_width = GetSystemMetrics(0)screen_height = GetSystemMetrics(1)window_width = int(screen_width*percent)window_height = int(screen_height*percent)self.SetSize((window_width, window_height))position_x = (screen_width - window_width) // 2position_y = (screen_height - window_height) // 2self.SetPosition(wx.Point(position_x, position_y))labelSize = (int(310*percent), int(25*percent))positionx_label1 = int(5*percent)positiony_label1 = int(5*percent)positionx_label2 = window_width - labelSize[0]positiony_label2 = int(5*percent)self.usernameLabel = wx.StaticText(self, label='', size=labelSize)self.usernameLabel.SetPosition(wx.Point(positionx_label1, positiony_label1))self.usernameLabel.SetFont(labelFont)self.usernameLabel.SetForegroundColour(labelColor)if username == '':username = '未知用户'self.usernameLabel = wx.StaticText(self, label='登录用户:'+username, size=labelSize)self.usernameLabel.SetPosition(wx.Point(positionx_label2, positiony_label2))self.usernameLabel.SetFont(labelFont)self.usernameLabel.SetForegroundColour(labelColor)if not username == '未知用户':self.usernameLabel.Bind( wx.EVT_LEFT_DOWN, self.logout )positionx_label3 = (window_width - buttonSize[0]) // 2positiony_label3 = window_height - int(150*percent)self.SelBtn = wx.Button(self, label='选择图片', size=buttonSize)self.SelBtn.SetPosition(wx.Point(positionx_label3, positiony_label3))self.SelBtn.Bind(wx.EVT_BUTTON, self.OnChooseFile)self.SelBtn.SetFont(labelFont)self.SelBtn.SetForegroundColour(labelColor)positionx_label4 = (window_width - imgSize[0]) // 2positiony_label4 = (window_height - imgSize[1] - labelSize[1] - buttonSize[1]) // 2self.image_ctrl = wx.StaticBitmap(self, size=imgSize)self.image_ctrl.SetPosition(wx.Point(positionx_label4, positiony_label4))#添加菜单self.appendmenus()self.SetWindowStyle(wx.STAY_ON_TOP | wx.CAPTION | wx.SYSTEM_MENU)self.SetTitle(APP_TITLE+'-'+self.sub_title)self.SetIcon(wx.Icon(APP_ICON))self.SetBackgroundColour( wx.Colour( 245, 222, 179 ) )self.Raise()self.Show(True)show_window = TruemyFrame = self.my_frameif not myFrame in myFrames:myFrames[myFrame] = self#绑定事件self.timer = wx.Timer(self)self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)self.timer.Start(3000)def OnChooseFile(self, event):global imgSizewildcard = 'All files(*.jpg)|*.jpg|*.png|*.gif'dialog = wx.FileDialog(None,'select',os.getcwd(),'',wildcard,wx.FD_OPEN)if dialog.ShowModal() == wx.ID_OK:fileName = dialog.GetPath()image = wx.Image(fileName, wx.BITMAP_TYPE_ANY)image.Rescale(imgSize[0], imgSize[1], wx.IMAGE_QUALITY_NORMAL)self.image_ctrl.SetBitmap(wx.Bitmap(image))dialog.Destroy()def appendmenus(self):menu_bar = wx.MenuBar()gongneng_menu = wx.Menu()guanyu_menu = wx.Menu()index_item = gongneng_menu.Append(-1, "&首页", "返回首页")user_item1 = gongneng_menu.Append(-1, "&用户列表", "查看用户信息")tree_item1 = gongneng_menu.Append(-1, "&展示树", "查看树形结构")about_item = guanyu_menu.Append(-1, "&关于我们", "关于我们")self.Bind(wx.EVT_MENU, self.toindex, index_item)self.Bind(wx.EVT_MENU, self.touserlist, user_item1)self.Bind(wx.EVT_MENU, self.totree, tree_item1)self.Bind(wx.EVT_MENU, self.toabout, about_item)menu_bar.Append(gongneng_menu, "&功能")menu_bar.Append(guanyu_menu, "&关于")self.SetMenuBar(menu_bar)def logout(self, event):global username, passworddlg = wx.MessageDialog(None, '确认退出吗?', '用户确认', wx.YES_NO)result = dlg.ShowModal()if result == wx.ID_YES:username = ''password = ''self.tologin(event)else:passdlg.Destroy()return Truedef tologin(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'login'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = MainFrame(None)show_window = Truedef toindex(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'main'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = MainFrame(None)show_window = Truedef touserlist(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'user'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = UserFrame(None)show_window = Truedef totree(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'tree'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = TreeFrame(None)show_window = Truedef toabout(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'about'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = AboutFrame(None)show_window = Truedef OnTimer(self, event):thread_obj = threading.Thread(target=self.OnTimer1, args=(event, ))thread_obj.start()def OnTimer1(self, event):passdef __del__( self ):passclass UserFrame ( wx.Frame):sub_title = '用户列表'my_frame = 'user'page = 1pagesize = 50def __init__( self, parent ):global percent,labelSize,textSize,buttonSize,lineHeight,username,show_window,myFrames,myFramewx.Frame.__init__ ( self, parent, id = wx.ID_ANY, style = wx.DEFAULT_FRAME_STYLE )labelFont = wx.Font(int(18*percent), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)labelColor = wx.Colour( 139, 69, 19 )#设置窗口位置,大小screen_width = GetSystemMetrics(0)screen_height = GetSystemMetrics(1)window_width = int(screen_width*percent)window_height = int(screen_height*percent)self.SetSize((window_width, window_height))position_x = (screen_width - window_width) // 2position_y = (screen_height - window_height) // 2self.SetPosition(wx.Point(position_x, position_y))labelSize = (int(310*percent), int(25*percent))positionx_label1 = int(5*percent)positiony_label1 = int(5*percent)positionx_label2 = window_width - labelSize[0]positiony_label2 = int(5*percent)self.usernameLabel = wx.StaticText(self, label='', size=labelSize)self.usernameLabel.SetPosition(wx.Point(positionx_label1, positiony_label1))self.usernameLabel.SetFont(labelFont)self.usernameLabel.SetForegroundColour(labelColor)if username == '':username = '未知用户'self.usernameLabel = wx.StaticText(self, label='登录用户:'+username, size=labelSize)self.usernameLabel.SetPosition(wx.Point(positionx_label2, positiony_label2))self.usernameLabel.SetFont(labelFont)self.usernameLabel.SetForegroundColour(labelColor)if not username == '未知用户':self.usernameLabel.Bind( wx.EVT_LEFT_DOWN, self.logout )self.showGridData(self.page)positionx_label4 = int(5*percent)positiony_label4 = int(930*percent)self.preButton = wx.Button( self, label='上一页', size=buttonSize)self.preButton.SetPosition(wx.Point(positionx_label4, positiony_label4))self.preButton.SetFont(labelFont)self.preButton.SetForegroundColour(labelColor)self.preButton.Bind( wx.EVT_BUTTON, self.showGridDataPre )positionx_label5 = int(160*percent)positiony_label5 = int(930*percent)self.nextButton = wx.Button( self, label='下一页', size=buttonSize)self.nextButton.SetPosition(wx.Point(positionx_label5, positiony_label5))self.nextButton.SetFont(labelFont)self.nextButton.SetForegroundColour(labelColor)self.nextButton.Bind( wx.EVT_BUTTON, self.showGridDataNext )#添加菜单self.appendmenus()self.SetWindowStyle(wx.STAY_ON_TOP | wx.CAPTION | wx.SYSTEM_MENU)self.SetTitle(APP_TITLE+'-'+self.sub_title)self.SetIcon(wx.Icon(APP_ICON))self.SetBackgroundColour( wx.Colour( 245, 222, 179 ) )self.Raise()self.Show(True)show_window = TruemyFrame = self.my_frameif not myFrame in myFrames:myFrames[myFrame] = self#绑定事件self.timer = wx.Timer(self)self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)self.timer.Start(3000)def appendmenus(self):menu_bar = wx.MenuBar()gongneng_menu = wx.Menu()guanyu_menu = wx.Menu()index_item = gongneng_menu.Append(-1, "&首页", "返回首页")user_item1 = gongneng_menu.Append(-1, "&用户列表", "查看用户信息")tree_item1 = gongneng_menu.Append(-1, "&展示树", "查看树形结构")about_item = guanyu_menu.Append(-1, "&关于我们", "关于我们")self.Bind(wx.EVT_MENU, self.toindex, index_item)self.Bind(wx.EVT_MENU, self.touserlist, user_item1)self.Bind(wx.EVT_MENU, self.totree, tree_item1)self.Bind(wx.EVT_MENU, self.toabout, about_item)menu_bar.Append(gongneng_menu, "&功能")menu_bar.Append(guanyu_menu, "&关于")self.SetMenuBar(menu_bar)def showGridDataPre(self, event):global datasself.page = self.page - 1totalpage = math.ceil(len(datas) / (self.pagesize + 0.00))if self.page < 1:self.page = 1if self.page > totalpage:self.page = totalpageself.showGridData(self.page)def showGridDataNext(self, event):global datasself.page = self.page + 1totalpage = math.ceil(len(datas) / (self.pagesize + 0.00))if self.page < 1:self.page = 1if self.page > totalpage:self.page = totalpageself.showGridData(self.page)def showGridData(self, page):try:self.grid.Destroy()except:passlabelFont = wx.Font(int(18*percent), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)gridSize = (int(1880*percent), int(885*percent))positionx_label3 = int(5*percent)positiony_label3 = int(30*percent)self.grid = wx.grid.Grid(self, size=gridSize)self.grid.SetPosition(wx.Point(positionx_label3, positiony_label3))self.grid.SetFont(labelFont)self.grid.SetRowLabelSize(25) # 设置行标签的宽度self.grid.SetColLabelSize(25) # 设置列标签的宽度self.grid.SetColLabelValue(0, "姓名")self.grid.SetColLabelValue(1, "性别")self.grid.SetColLabelValue(2, "年龄")self.grid.SetColLabelValue(3, "邮箱")self.grid.SetColLabelValue(4, "公司")self.grid.SetColLabelValue(5, "地址")cellColor = wx.Colour( 240, 255, 255 )data = self.getData(page)self.grid.CreateGrid(len(data), len(data[0]))for row in range(len(data)):for col in range(len(data[row])):self.grid.SetCellValue(row, col, data[row][col])self.grid.SetCellBackgroundColour(row, col, cellColor)if col in [0,1,2]:self.grid.SetColSize(col, int(215*percent))elif col in [3]:self.grid.SetColSize(col, int(350*percent))elif col in [4]:self.grid.SetColSize(col, int(350*percent))elif col in [5]:self.grid.SetColSize(col, int(500*percent))def getData(self, page):global datastotalpage = math.ceil(len(datas) / (self.pagesize + 0.00))if page < 1:page = 1if page > totalpage:page = totalpagestart = (page - 1) * self.pagesizeend = start + self.pagesizeresdata = []for i,data in enumerate(datas):if i>= start and i<end:resdata.append(data)return resdatadef logout(self, event):global username, passworddlg = wx.MessageDialog(None, '确认退出吗?', '用户确认', wx.YES_NO)result = dlg.ShowModal()if result == wx.ID_YES:username = ''password = ''self.tologin(event)else:passdlg.Destroy()return Truedef tologin(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'login'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = MainFrame(None)show_window = Truedef toindex(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'main'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = MainFrame(None)show_window = Truedef touserlist(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'user'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = UserFrame(None)show_window = Truedef totree(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'tree'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = TreeFrame(None)show_window = Truedef toabout(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'about'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = AboutFrame(None)show_window = Truedef OnTimer(self, event):thread_obj = threading.Thread(target=self.OnTimer1, args=(event, ))thread_obj.start()def OnTimer1(self, event):passdef __del__( self ):passclass AboutFrame ( wx.Frame):sub_title = '关于我们'my_frame = 'about'def __init__( self, parent ):global percent,labelSize,textSize,buttonSize,lineHeight,username,abouttext,show_window,myFrames,myFramewx.Frame.__init__ ( self, parent, id = wx.ID_ANY, style = wx.DEFAULT_FRAME_STYLE )labelFont = wx.Font(int(18*percent), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)labelColor = wx.Colour( 139, 69, 19 )#设置窗口位置,大小screen_width = GetSystemMetrics(0)screen_height = GetSystemMetrics(1)window_width = int(screen_width*percent)window_height = int(screen_height*percent)self.SetSize((window_width, window_height))position_x = (screen_width - window_width) // 2position_y = (screen_height - window_height) // 2self.SetPosition(wx.Point(position_x, position_y))labelSize = (int(310*percent), int(25*percent))positionx_label1 = int(5*percent)positiony_label1 = int(5*percent)positionx_label2 = window_width - labelSize[0]positiony_label2 = int(5*percent)self.usernameLabel = wx.StaticText(self, label='', size=labelSize)self.usernameLabel.SetPosition(wx.Point(positionx_label1, positiony_label1))self.usernameLabel.SetFont(labelFont)self.usernameLabel.SetForegroundColour(labelColor)if username == '':username = '未知用户'self.usernameLabel = wx.StaticText(self, label='登录用户:'+username, size=labelSize)self.usernameLabel.SetPosition(wx.Point(positionx_label2, positiony_label2))self.usernameLabel.SetFont(labelFont)self.usernameLabel.SetForegroundColour(labelColor)if not username == '未知用户':self.usernameLabel.Bind( wx.EVT_LEFT_DOWN, self.logout )textSize1 = (int(1880*percent), int(945*percent))positionx_label3 = int(8*percent)positiony_label3 = int(30*percent)self.usernameInput = wx.TextCtrl(self, style=wx.TE_MULTILINE, size=textSize1)self.usernameInput.SetPosition(wx.Point(positionx_label3, positiony_label3))self.usernameInput.SetValue(abouttext)#添加菜单self.appendmenus()self.SetWindowStyle(wx.STAY_ON_TOP | wx.CAPTION | wx.SYSTEM_MENU)self.SetTitle(APP_TITLE+'-'+self.sub_title)self.SetIcon(wx.Icon(APP_ICON))self.SetBackgroundColour( wx.Colour( 245, 222, 179 ) )self.Raise()self.Show(True)show_window = TruemyFrame = self.my_frameif not myFrame in myFrames:myFrames[myFrame] = self#绑定事件self.timer = wx.Timer(self)self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)self.timer.Start(3000)def appendmenus(self):menu_bar = wx.MenuBar()gongneng_menu = wx.Menu()guanyu_menu = wx.Menu()index_item = gongneng_menu.Append(-1, "&首页", "返回首页")user_item1 = gongneng_menu.Append(-1, "&用户列表", "查看用户信息")tree_item1 = gongneng_menu.Append(-1, "&展示树", "查看树形结构")about_item = guanyu_menu.Append(-1, "&关于我们", "关于我们")self.Bind(wx.EVT_MENU, self.toindex, index_item)self.Bind(wx.EVT_MENU, self.touserlist, user_item1)self.Bind(wx.EVT_MENU, self.totree, tree_item1)self.Bind(wx.EVT_MENU, self.toabout, about_item)menu_bar.Append(gongneng_menu, "&功能")menu_bar.Append(guanyu_menu, "&关于")self.SetMenuBar(menu_bar)def logout(self, event):global username, passworddlg = wx.MessageDialog(None, '确认退出吗?', '用户确认', wx.YES_NO)result = dlg.ShowModal()if result == wx.ID_YES:username = ''password = ''self.tologin(event)else:passdlg.Destroy()return Truedef tologin(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'login'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = MainFrame(None)show_window = Truedef toindex(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'main'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = MainFrame(None)show_window = Truedef touserlist(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'user'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = UserFrame(None)show_window = Truedef totree(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'tree'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = TreeFrame(None)show_window = Truedef toabout(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'about'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = AboutFrame(None)show_window = Truedef OnTimer(self, event):thread_obj = threading.Thread(target=self.OnTimer1, args=(event, ))thread_obj.start()def OnTimer1(self, event):passdef __del__( self ):passclass TreeFrame ( wx.Frame):sub_title = '展示树'my_frame = 'tree'def __init__( self, parent ):global percent,labelSize,textSize,buttonSize,lineHeight,username,abouttext,show_window,myFrames,myFramewx.Frame.__init__ ( self, parent, id = wx.ID_ANY, style = wx.DEFAULT_FRAME_STYLE )labelFont = wx.Font(int(18*percent), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)labelColor = wx.Colour( 139, 69, 19 )#设置窗口位置,大小screen_width = GetSystemMetrics(0)screen_height = GetSystemMetrics(1)window_width = int(screen_width*percent)window_height = int(screen_height*percent)self.SetSize((window_width, window_height))position_x = (screen_width - window_width) // 2position_y = (screen_height - window_height) // 2self.SetPosition(wx.Point(position_x, position_y))labelSize = (int(310*percent), int(25*percent))positionx_label1 = int(5*percent)positiony_label1 = int(5*percent)positionx_label2 = window_width - labelSize[0]positiony_label2 = int(5*percent)self.usernameLabel = wx.StaticText(self, label='', size=labelSize)self.usernameLabel.SetPosition(wx.Point(positionx_label1, positiony_label1))self.usernameLabel.SetFont(labelFont)self.usernameLabel.SetForegroundColour(labelColor)if username == '':username = '未知用户'self.usernameLabel = wx.StaticText(self, label='登录用户:'+username, size=labelSize)self.usernameLabel.SetPosition(wx.Point(positionx_label2, positiony_label2))self.usernameLabel.SetFont(labelFont)self.usernameLabel.SetForegroundColour(labelColor)if not username == '未知用户':self.usernameLabel.Bind( wx.EVT_LEFT_DOWN, self.logout )textSize1 = (int(1880*percent), int(945*percent))positionx_label3 = int(8*percent)positiony_label3 = int(30*percent)self.tree = wx.TreeCtrl(self, size=textSize1)self.tree.SetPosition(wx.Point(positionx_label3, positiony_label3))self.root = self.tree.AddRoot("食物")self.zhushi = self.tree.AppendItem(self.root, "主食")self.shucai = self.tree.AppendItem(self.root, "蔬菜")self.shuiguo = self.tree.AppendItem(self.root, "水果")self.mifan = self.tree.AppendItem(self.zhushi, "米饭")self.miantiao = self.tree.AppendItem(self.zhushi, "面条")self.shuijiao = self.tree.AppendItem(self.zhushi, "水饺")self.chaocai = self.tree.AppendItem(self.zhushi, "炒菜")self.liangbancai = self.tree.AppendItem(self.zhushi, "凉拌菜")self.tree.AppendItem(self.shucai, "土豆")self.tree.AppendItem(self.shucai, "青椒")self.tree.AppendItem(self.shucai, "西红柿")self.tree.AppendItem(self.shucai, "茄子")self.tree.AppendItem(self.shucai, "青菜")self.tree.AppendItem(self.shucai, "芹菜")self.tree.AppendItem(self.shucai, "辣椒")self.tree.AppendItem(self.shucai, "豆角")self.tree.AppendItem(self.shuiguo, "西瓜")self.tree.AppendItem(self.shuiguo, "葡萄")self.tree.AppendItem(self.shuiguo, "桃子")self.tree.AppendItem(self.shuiguo, "苹果")self.tree.AppendItem(self.shuiguo, "橘子")self.tree.AppendItem(self.shuiguo, "哈密瓜")self.tree.AppendItem(self.miantiao, "炸酱面")self.tree.AppendItem(self.miantiao, "板面")self.tree.AppendItem(self.miantiao, "烩面")self.tree.AppendItem(self.miantiao, "刀削面")self.tree.AppendItem(self.miantiao, "扯面")self.tree.AppendItem(self.miantiao, "云吞面")self.tree.Expand(self.root)self.tree.Expand(self.zhushi)self.tree.Expand(self.miantiao)#添加菜单self.appendmenus()self.SetWindowStyle(wx.STAY_ON_TOP | wx.CAPTION | wx.SYSTEM_MENU)self.SetTitle(APP_TITLE+'-'+self.sub_title)self.SetIcon(wx.Icon(APP_ICON))self.SetBackgroundColour( wx.Colour( 245, 222, 179 ) )self.Raise()self.Show(True)show_window = TruemyFrame = self.my_frameif not myFrame in myFrames:myFrames[myFrame] = self#绑定事件self.timer = wx.Timer(self)self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)self.timer.Start(3000)def appendmenus(self):menu_bar = wx.MenuBar()gongneng_menu = wx.Menu()guanyu_menu = wx.Menu()index_item = gongneng_menu.Append(-1, "&首页", "返回首页")user_item1 = gongneng_menu.Append(-1, "&用户列表", "查看用户信息")tree_item1 = gongneng_menu.Append(-1, "&展示树", "查看树形结构")about_item = guanyu_menu.Append(-1, "&关于我们", "关于我们")self.Bind(wx.EVT_MENU, self.toindex, index_item)self.Bind(wx.EVT_MENU, self.touserlist, user_item1)self.Bind(wx.EVT_MENU, self.totree, tree_item1)self.Bind(wx.EVT_MENU, self.toabout, about_item)menu_bar.Append(gongneng_menu, "&功能")menu_bar.Append(guanyu_menu, "&关于")self.SetMenuBar(menu_bar)def logout(self, event):global username, passworddlg = wx.MessageDialog(None, '确认退出吗?', '用户确认', wx.YES_NO)result = dlg.ShowModal()if result == wx.ID_YES:username = ''password = ''self.tologin(event)else:passdlg.Destroy()return Truedef tologin(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'login'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = MainFrame(None)show_window = Truedef toindex(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'main'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = MainFrame(None)show_window = Truedef touserlist(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'user'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = UserFrame(None)show_window = Truedef totree(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'tree'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = TreeFrame(None)show_window = Truedef toabout(self, event):global myFrames,show_window,myFrameself.Hide()myFrame = 'about'if myFrame in myFrames:mfObj = myFrames[myFrame]mfObj.Show(True)show_window = Trueelse:mfObj = AboutFrame(None)show_window = Truedef OnTimer(self, event):thread_obj = threading.Thread(target=self.OnTimer1, args=(event, ))thread_obj.start()def OnTimer1(self, event):passdef __del__( self ):passif __name__ == "__main__":app = wx.App(False)login = LoginFrame(None)app.MainLoop()
截图: