使用wx制作一个桌面软件

前面因为抓取数据,为了方便期间做了各界面,用到了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 Faker

APP_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 wx
 
class 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 res
    
def 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 menu
    
    def onShow(self, event):
        global show_window,myFrames,myFrame
        frame = myFrames[myFrame]
        if show_window == True:
            frame.Show(False)
            show_window = False
        else:
            frame.Show(True)
            show_window = True

    def 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_icon
        
        
        wx.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) // 2
        position_y = (screen_height - window_height) // 2
        self.SetPosition(wx.Point(position_x, position_y))
        
        #计算控件坐标
        positionx_label = (window_width - (labelSize[0] + textSize[0])) // 2
        positionx_text = positionx_label + labelSize[0]
        positionx_button = positionx_text + textSize[0] - buttonSize[0]
        
        positiony_label1 = (window_height - (labelSize[1]*3 + lineHeight*2)) // 2
        positiony_label2 = positiony_label1 + labelSize[1] + lineHeight
        positiony_label3 = positiony_label1 + labelSize[1] + lineHeight + labelSize[1] + lineHeight
        
        self.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 = True
        
        myFrame = self.my_frame
        if not myFrame in myFrames:
            myFrames[myFrame] = self
        
        #显示icon
        if 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, password
        
        usernameVal = self.usernameInput.GetValue()
        passwordVal = self.passwordInput.GetValue()
        if not usernameVal in ['admin', 'root'] or passwordVal != '123456':
            wx.MessageBox('用户名和密码不匹配')
            return False
        
        username = usernameVal
        password = passwordVal
        self.Hide()
        mfObj = MainFrame(None)
        
        return True
        
    def __del__( self ):
        pass
    
class MainFrame ( wx.Frame):
    sub_title = '首页'
    my_frame = 'main'
    
    def __init__( self, parent ):
        global percent,labelSize,textSize,buttonSize,imgSize,lineHeight,username,show_window,myFrames,myFrame
        
        wx.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) // 2
        position_y = (screen_height - window_height) // 2
        self.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]) // 2
        positiony_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]) // 2
        positiony_label4 = (window_height - imgSize[1] - labelSize[1] - buttonSize[1]) // 2
        self.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 = True
        
        myFrame = self.my_frame
        if 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 imgSize
        
        wildcard = '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, password
        
        dlg = wx.MessageDialog(None, '确认退出吗?', '用户确认', wx.YES_NO)
        result = dlg.ShowModal()
        if result == wx.ID_YES:
            username = ''
            password = ''
            self.tologin(event)
        else:
            pass
        dlg.Destroy()
        
        return True
        
    def tologin(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'login'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = MainFrame(None)
            show_window = True
        
    def toindex(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'main'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = MainFrame(None)
            show_window = True
            
    def touserlist(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'user'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = UserFrame(None)
            show_window = True
            
    def totree(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'tree'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = TreeFrame(None)
            show_window = True
        
    def toabout(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'about'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = AboutFrame(None)
            show_window = True
        
    def OnTimer(self, event):
        thread_obj = threading.Thread(target=self.OnTimer1, args=(event, ))
        thread_obj.start()
        
    def OnTimer1(self, event):
        pass
        
    def __del__( self ):
        pass
    
class UserFrame ( wx.Frame):
    sub_title = '用户列表'
    my_frame = 'user'
    page = 1
    pagesize = 50
    
    def __init__( self, parent ):
        global percent,labelSize,textSize,buttonSize,lineHeight,username,show_window,myFrames,myFrame
        
        wx.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) // 2
        position_y = (screen_height - window_height) // 2
        self.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 = True
        
        myFrame = self.my_frame
        if 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 datas
            
        self.page = self.page - 1
        totalpage = math.ceil(len(datas) / (self.pagesize + 0.00))
        if self.page < 1:
            self.page = 1
        if self.page > totalpage:
            self.page = totalpage
            
        self.showGridData(self.page)
        
    def showGridDataNext(self, event):
        global datas
            
        self.page = self.page + 1
        totalpage = math.ceil(len(datas) / (self.pagesize + 0.00))
        if self.page < 1:
            self.page = 1
        if self.page > totalpage:
            self.page = totalpage
            
        self.showGridData(self.page)
        
    def showGridData(self, page):
        try:
            self.grid.Destroy()
        except:
            pass
            
        labelFont = 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 datas
        
        totalpage = math.ceil(len(datas) / (self.pagesize + 0.00))
        if page < 1:
            page = 1
        if page > totalpage:
            page = totalpage
        start = (page - 1) * self.pagesize
        end = start + self.pagesize
        resdata = []
        for i,data in enumerate(datas):
            if i>= start and i<end:
                resdata.append(data)
        return resdata
        
    def logout(self, event):
        global username, password
        
        dlg = wx.MessageDialog(None, '确认退出吗?', '用户确认', wx.YES_NO)
        result = dlg.ShowModal()
        if result == wx.ID_YES:
            username = ''
            password = ''
            self.tologin(event)
        else:
            pass
        dlg.Destroy()
        
        return True
        
    def tologin(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'login'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = MainFrame(None)
            show_window = True
    
    def toindex(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'main'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = MainFrame(None)
            show_window = True
            
    def touserlist(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'user'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = UserFrame(None)
            show_window = True
            
    def totree(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'tree'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = TreeFrame(None)
            show_window = True
        
    def toabout(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'about'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = AboutFrame(None)
            show_window = True
        
    def OnTimer(self, event):
        thread_obj = threading.Thread(target=self.OnTimer1, args=(event, ))
        thread_obj.start()
        
    def OnTimer1(self, event):
        pass
        
    def __del__( self ):
        pass
    
class AboutFrame ( wx.Frame):
    sub_title = '关于我们'
    my_frame = 'about'
    
    def __init__( self, parent ):
        global percent,labelSize,textSize,buttonSize,lineHeight,username,abouttext,show_window,myFrames,myFrame
        
        wx.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) // 2
        position_y = (screen_height - window_height) // 2
        self.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 = True
        
        myFrame = self.my_frame
        if 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, password
        
        dlg = wx.MessageDialog(None, '确认退出吗?', '用户确认', wx.YES_NO)
        result = dlg.ShowModal()
        if result == wx.ID_YES:
            username = ''
            password = ''
            self.tologin(event)
        else:
            pass
        dlg.Destroy()
        
        return True

    def tologin(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'login'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = MainFrame(None)
            show_window = True
                
    def toindex(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'main'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = MainFrame(None)
            show_window = True
            
    def touserlist(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'user'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = UserFrame(None)
            show_window = True
            
    def totree(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'tree'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = TreeFrame(None)
            show_window = True
        
    def toabout(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'about'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = AboutFrame(None)
            show_window = True
        
    def OnTimer(self, event):
        thread_obj = threading.Thread(target=self.OnTimer1, args=(event, ))
        thread_obj.start()
        
    def OnTimer1(self, event):
        pass
        
    def __del__( self ):
        pass
    
class TreeFrame ( wx.Frame):
    sub_title = '展示树'
    my_frame = 'tree'
    
    def __init__( self, parent ):
        global percent,labelSize,textSize,buttonSize,lineHeight,username,abouttext,show_window,myFrames,myFrame
        
        wx.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) // 2
        position_y = (screen_height - window_height) // 2
        self.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 = True
        
        myFrame = self.my_frame
        if 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, password
        
        dlg = wx.MessageDialog(None, '确认退出吗?', '用户确认', wx.YES_NO)
        result = dlg.ShowModal()
        if result == wx.ID_YES:
            username = ''
            password = ''
            self.tologin(event)
        else:
            pass
        dlg.Destroy()
        
        return True

    def tologin(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'login'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = MainFrame(None)
            show_window = True
                
    def toindex(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'main'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = MainFrame(None)
            show_window = True
            
    def touserlist(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'user'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = UserFrame(None)
            show_window = True
            
    def totree(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'tree'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = TreeFrame(None)
            show_window = True
        
    def toabout(self, event):
        global myFrames,show_window,myFrame
        self.Hide()
        myFrame = 'about'
        if myFrame in myFrames:
            mfObj = myFrames[myFrame]
            mfObj.Show(True)
            show_window = True
        else:
            mfObj = AboutFrame(None)
            show_window = True
        
    def OnTimer(self, event):
        thread_obj = threading.Thread(target=self.OnTimer1, args=(event, ))
        thread_obj.start()
        
    def OnTimer1(self, event):
        pass
        
    def __del__( self ):
        pass

if __name__ == "__main__":
    app = wx.App(False)
    
    login = LoginFrame(None)
    
    app.MainLoop()

  

截图:

 

 

 

 

 

 

 

posted @ 2024-08-08 15:46  河北大学-徐小波  阅读(20)  评论(0编辑  收藏  举报