首页 > 其他分享 >使用wx制作一个桌面软件

使用wx制作一个桌面软件

时间:2024-08-08 15:51:09浏览次数:7  
标签:桌面 int self percent window 软件 myFrame 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()

  

截图:

 

 

 

 

 

 

 

标签:桌面,int,self,percent,window,软件,myFrame,wx
From: https://www.cnblogs.com/xuxiaobo/p/18349077

相关文章

  • 免费项目管理软件:提高效率的顶级选择
    国内外主流的10款免费项目管理工具对比:PingCode、Worktile、Jira、Wrike、ClickUp、Trello、Asana、飞书、Tapd、Teambition。在选择项目管理软件时,许多团队面临的最大挑战之一是成本。尤其是对于初创公司或小型企业来说,高昂的软件订阅费可能是一个沉重的负担。然而,市场上确......
  • 软件开发
    软件开发流程需求分析:需求规格说明书、产品原型设计:UI设计、接口设计、数据库设计编码:项目代码、单元测试测试:编写测试用例、测试报告上线运维:软件环境安装、配置角色分工项目经理:对整个项目负责、任务分配、把控进度产品经理:进行需求调研,输出需求调研文档、产品原型等......
  • 如何在不同阶段选择合适的项目管理软件?
    作为一个资深的产品经理,我有幸在过去的20多年里,接触过很多不同行业,从互联网行业、软件行业,到金融行业、制造行业,所积累的丰富经验让我对项目管理软件的选择有了更深入的了解和认识。不同行业的项目管理痛点每个行业都有自己的特点和痛点。在互联网行业,项目节奏快、需求变化......
  • 全国高校软件测试开发教学师资培训会圆满落幕
    7月27日—为期六天的“全国高校软件测试开发教学师资培训会”在辽宁大连拉开序幕。本次盛会不仅吸引了来自全国多所高校的优秀教师代表,还汇聚了互联网行业一线测试经理,共同就软件测试与开发教学的新理念、新方法进行了深入探讨,旨在促进高校与企业之间的技术交流,提升高校毕业生的......
  • Labels and Databases for Mac( 数据库标签制作软件)1.8.2中文版
    LabelsandDatabasesforMac一款数据库标签制作和设计软件。LabelsandDatabases版可以帮助您使用各种内置标签格式创建标签、信封和卡片,并使用用户数据库中包含的信息填充它们,即使用MailMerge创建和打印标签。LabelsandDatabasesforMac软件下载地址Labelsand......
  • 7月新特性 | 软件开发生产线CodeArts发布多项新特性等你体验!
    华为云软件开发生产线CodeArts是一站式、全流程、安全可信的云原生DevSecOps平台,覆盖需求、开发、测试、部署、运维等软件交付全生命周期环节,为开发者打造全云化研发体验。2024年7月,CodeArts发布了需求管理、代码检查、测试计划、部署、流水线、API相关新特性,具体内容如下:需求管......
  • 掌握 R 软件在 Windows 及 Mac 上的下载安装流程
    临床数据科学是一门综合利用统计学、数据挖掘、机器学习和信息技术等方法,对临床数据进行分析和解释的学科。它的目标是从海量的临床数据中挖掘出有价值的信息,以支持医疗决策,提高医疗质量,降低医疗成本,并促进医学研究的发展。临床数据科学的研究对象包括电子病历、基因组数据、......
  • Electron + Vue+Node.js 搭建前端桌面应用
    一、在使用Electron之前我们要了解Electron是什么?Electron官网地址点此: electron官方地址Electron相当于一个浏览器的外壳,我们将编写的HTML,CSS,Javascript网页程序嵌入进Electron里面以便于在桌面上进行运行。通俗来讲它就是一个软件,如QQ、网易......
  • linux 软件编程学习第八天 线程
    进程1.waitpid   pid_twaitpid(pid_tpid,int*wstatus,intoptions);  功能:    回收指定的子进程空间  参数:    pid:要回收的子进程的pid    wstatus:回收状态的指针    options:回收选项      0阻......
  • 洛谷P8869 莲子的软件工程学之警钟长鸣
    洛谷P8869题解传送锚点摸鱼环节[传智杯#5初赛]A-莲子的软件工程学题目背景在宇宙射线的轰击下,莲子电脑里的一些她自己预定义的函数被损坏了。对于一名理科生来说,各种软件在学习和研究中是非常重要的。为了尽快恢复她电脑上的软件的正常使用,她需要尽快地重新编写这么一......