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打个包,然后用管理员身份运行