wxPython hosts文件编辑器

import wx

class MyFrame(wx.Frame):
    def __init__(self,hostsPath):
        wx.Frame.__init__(self,None,-1,title='host文件修改GUI',size=(540,600))
        self.panel = wx.Panel(self)
        self.hostsPath = hostsPath
        self.loadHostContent()
        self.initPanel()
        self.highlightText()

    def loadHostContent(self):
        '''读取hosts文件,并加载'''
        with open(self.hostsPath, 'r') as f:
            self.content = f.read()

    def initPanel(self):
        '''初始化UI'''
        refreshBtn = wx.Button(self.panel, -1, '刷新', (100, 10), (100, 30))
        refreshBtn.Bind(wx.EVT_BUTTON, self.refreshEvent)
        saveBtn = wx.Button(self.panel,-1,'保存',(300,10),(100,30))
        saveBtn.Bind(wx.EVT_BUTTON,self.saveEvent)
        self.textArea = wx.TextCtrl(self.panel, pos=(10, 50), size=(500, 500),style=wx.TE_MULTILINE|wx.TE_RICH2)
        self.textArea.SetValue(self.content)

    def highlightText(self):
        '''高亮显示文字'''
        count = 0
        for i in self.content.split('\n'):
            length = len(i) + 1
            if i.startswith('#'):
                # #开头的是注释部分
                self.textArea.SetStyle(count, count + length, wx.TextAttr("grey", "white"))
            else:
                self.textArea.SetStyle(count, count + length, wx.TextAttr("blue", "white"))
            count += length


    def saveEvent(self,e):
        '''保存文件内容'''
        content = self.textArea.GetValue()
        try:
            with open(self.hostsPath,'w') as f:
                f.write(content)
            wx.MessageBox('保存成功')
        except PermissionError as e:
            # 有可能会出现权限不足的错误
            wx.MessageBox(e.strerror)

    def refreshEvent(self,e):
        '''刷新功能,防止外部修改导致内容不同步'''
        self.loadHostContent()
        self.textArea.SetValue(self.content)
        self.highlightText()

if __name__ == '__main__':
    app = wx.App()
    # hosts文件路径
    hostsPath = 'C:\Windows\System32\drivers\etc\hosts'
    frame = MyFrame(hostsPath)
    frame.Show()
    app.MainLoop()

效果图
在这里插入图片描述
如果遇到Permission Denied
在这里插入图片描述

可以用Pyinstaller打个包,然后用管理员身份运行
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值