python实现的文本编辑器

2023-05-16

wxpython实现的文本编辑器

效果如下:


主要功能:

1.编辑保存文本,打开修改文本

2.常用快捷键,复制,粘贴,全选等

3.支持撤销功能

4.支持弹出式菜单



代码如下:

#encoding=utf-8
import wx
import os


class MyFrame(wx.Frame):
    def __init__(self):
        self.file=''
        self.content=[]
        self.count=0
        self.width=700
        self.height=500
        wx.Frame.__init__(self,None,-1,u'记事本',size=(self.width,self.height))
        self.panel=wx.Panel(self,-1)
        menubar=wx.MenuBar()
        menu1=wx.Menu()
        menubar.Append(menu1,u'文件')
        menu1.Append(1001,u'打开')
        menu1.Append(1002,u'保存')
        menu1.Append(1003,u'另存为')
        menu1.Append(1004,u'退出')
        menu2=wx.Menu()
        menubar.Append(menu2,u'编辑')
        menu2.Append(2001,u'撤销')
        menu2.Append(2002,u'清空')
        menu2.Append(2003,u'剪切  Ctrl + X')
        menu2.Append(2004,u'复制  Ctrl + C')
        menu2.Append(2005,u'粘贴  Ctrl + V ')
        menu2.Append(2006,u'全选  Ctrl + A',)


        menu=wx.Menu()
        ctrla=menu.Append(-1, "\tCtrl-A")
        ctrlc=menu.Append(-1, "\tCtrl-C")
        ctrlx=menu.Append(-1, "\tCtrl-X")
        ctrlv=menu.Append(-1, "\tCtrl-V")
        ctrls=menu.Append(-1, "\tCtrl-S")
        menubar.Append(menu,'')
        self.SetMenuBar(menubar)


        self.Bind(wx.EVT_MENU, self.OnSelect, ctrla)
        self.Bind(wx.EVT_MENU, self.OnCopy,ctrlc)
        self.Bind(wx.EVT_MENU, self.OnCut,ctrlc)
        self.Bind(wx.EVT_MENU, self.OnPaste,ctrlv)
        self.Bind(wx.EVT_MENU, self.OnTSave, ctrls)




        self.Bind(wx.EVT_MENU, self.OnOpen, id=1001)
        self.Bind(wx.EVT_MENU, self.OnSave, id=1002)
        self.Bind(wx.EVT_MENU, self.OnSaveAll, id=1003)
        self.Bind(wx.EVT_MENU, self.OnExit, id=1004)


        self.Bind(wx.EVT_MENU, self.OnBack, id=2001)
        self.Bind(wx.EVT_MENU, self.OnClear, id=2002)
        self.Bind(wx.EVT_MENU, self.OnCut, id=2003)
        self.Bind(wx.EVT_MENU, self.OnCopy, id=2004)
        self.Bind(wx.EVT_MENU, self.OnPaste, id=2005)
        self.Bind(wx.EVT_MENU, self.OnSelect, id=2006)
        self.Bind(wx.EVT_SIZE, self.OnResize)




        new=wx.Image('./icons/new.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap()
        open=wx.Image('./icons/open.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap()
        exit=wx.Image('./icons/exit.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap()
        save=wx.Image('./icons/save.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap()
        saveall=wx.Image('./icons/saveall.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap()
        back=wx.Image('./icons/back.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap()
        go=wx.Image('./icons/go.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap()
        clear=wx.Image('./icons/clear.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap()


        toolbar=self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_TEXT)
        toolbar.AddSimpleTool(100,new,'New')
        toolbar.AddSimpleTool(200,open,'Open')
        toolbar.AddSimpleTool(300,exit,'Exit')
        toolbar.AddSimpleTool(400,save,'Save')
        toolbar.AddSimpleTool(500,saveall,'Save All')
        toolbar.AddSimpleTool(600,back,'Back')
        toolbar.AddSimpleTool(700,go,'Go')
        toolbar.AddSimpleTool(800,clear,'Clear')
        toolbar.Realize()


        self.Bind(wx.EVT_TOOL,self.OnTOpen,id=200)
        self.Bind(wx.EVT_TOOL,self.OnTExit,id=300)
        self.Bind(wx.EVT_TOOL,self.OnTSave,id=400)
        self.Bind(wx.EVT_TOOL,self.OnTBack,id=600)
        self.Bind(wx.EVT_TOOL,self.OnTGo,id=700)
        self.Bind(wx.EVT_TOOL,self.OnTClear,id=800)


        self.text=wx.TextCtrl(self.panel,-1,pos=(2,2),size=(self.width-10,self.height-50), style=wx.HSCROLL|wx.TE_MULTILINE)


        self.popupmenu = wx.Menu()#创建一个菜单
        for text in "Cut  Copy Paste SelectAll".split():#填充菜单
            item = self.popupmenu.Append(-1, text)
            self.Bind(wx.EVT_MENU, self.OnPopupItemSelected, item)
            self.panel.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup)#绑定一个显示菜单事件


    def OnShowPopup(self, event):#弹出显示
        pos = event.GetPosition()
        pos = self.panel.ScreenToClient(pos)
        self.panel.PopupMenu(self.popupmenu, pos)


    def OnPopupItemSelected(self, event):
        item = self.popupmenu.FindItemById(event.GetId())
        text = item.GetText()
        if text=='Cut':
            self.OnCut(event)
        elif text=='Copy':
            self.OnCopy(event)
        elif text=='Paste':
            self.OnPaste(event)
        elif text=='SelectAll':
            self.OnSelect(event)


    def OnOpen(self,event):
        filterFile=" All files (*.*) |*.*"
        opendialog=wx.FileDialog(self,u"选择文件",os.getcwd(),"",filterFile,wx.OPEN)
        if opendialog.ShowModal()==wx.ID_OK:
            self.file=opendialog.GetPath()
            f=open(self.file)
            self.text.write(f.read())
            f.close()
        opendialog.Destroy()


    def OnTOpen(self,event):
        filterFile="All files (*.*) |*.*"
        opendialog=wx.FileDialog(self,u"选择文件",os.getcwd(),"",filterFile,wx.OPEN)
        if opendialog.ShowModal()==wx.ID_OK:
            self.file=opendialog.GetPath()
            f=open(self.file)
            self.text.write(f.read())
            f.close()
            self.content.append(self.text.GetValue())
        opendialog.Destroy()


    def OnSave(self,event):
        filterFile="All files (*.*) |*.*"
        opendialog=wx.FileDialog(self,u'保存文件',os.getcwd(),"",filterFile,wx.SAVE)
        if opendialog.ShowModal()==wx.ID_OK:
            self.file=opendialog.GetPath()
            self.text.SaveFile(self.file)


    def OnTSave(self,event):
        if self.file == '':
            filterFile="All files (*.*) |*.*"
            opendialog=wx.FileDialog(self,u'保存文件',os.getcwd(),"",filterFile,wx.SAVE)
            if opendialog.ShowModal()==wx.ID_OK:
                self.file=opendialog.GetPath()
                self.text.SaveFile(self.file)
                self.content.append(self.text.GetValue())
                self.count=self.count+1
        else:
            self.text.SaveFile(self.file)
            self.content.append(self.text.GetValue())
            self.count=self.count+1






    def OnSaveAll(self,event):
            pass
    def OnExit(self,event):
        self.Close()


    def OnTExit(self,event):
        self.Close()
    def OnBack(self,event):
        self.text.Undo()


    def OnTBack(self,event):
        try:
            self.count=self.count-1
            self.text.SetValue(self.content[self.count])
        except IndexError:
            self.count=0


    def OnTGo(self,event):
        try:
            self.count=self.count+1
            self.text.SetValue(self.content[self.count])
        except IndexError:
            self.count=len(self.content)-1






    def OnClear(self,event):
        self.text.Clear()




    def OnTClear(self,event):
        self.text.Clear()


    def OnCut(self,event):
        self.text.Cut()


    def OnCopy(self,event):
        self.text.Copy()


    def OnPaste(self,event):
        self.text.Paste()


    def OnSelect(self,event):
        self.text.SelectAll()


    def OnResize(self,event):


        newsize=self.GetSize()


        width=newsize.GetWidth()-10


        height=newsize.GetHeight()-50


        self.text.SetSize((width,height))


        self.text.Refresh()
if __name__=='__main__':
    app=wx.App()
    myFrame=MyFrame()
    myFrame.Show()
    app.MainLoop()


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现的文本编辑器 的相关文章

  • 云原生 - 2、Openstack架构

    云原生 2 Openstack架构 1 什么是Openstack2 Release3 核心架构4 官方入口5 核心组件6 相关文章导读 1 什么是Openstack OpenStack是一个开源的云计算管理平台项目 xff0c 由NASA
  • 关于TrackMouseEvent用法总结

    对于这个函数我也是最近想研究控件自绘才知道它真正怎么用 以前只是见到过 嗯 废话不多说 我先说下我的问题 如何响应鼠标离开某个窗体 控件 事件 先大概讲下步骤 然后再集中对 TrackMouseEvent 进行详解 为按钮添加以下几个函数
  • 关于CComboBox的自绘

    我想 如果大家学过一些控件的自绘的话 CComboBox算是很难的一种了 首先是它本身的复杂度 它由三个控件组成 CEdit CListBox CButton 我想但就CEdit来讲 就够你受得了 还要想想他们之间的消息传递 不禁让人无从下
  • 2011年总结

    又是一年年终时 亦是一年总结时 想想自己从去年写年终总结到现在 已经很久没有写过字了 时间过得真快 又是一年过去了 这一年也是我出来工作的第二年 这一年总体来说自己无论在技术还是心态方面有了很大的进步 记得刚出学校那会 啥都不知道 对于工作
  • 内部链接与外部链接

    在说内部连接与外部连接前 xff0c 先说明一些概念 1 声明 一个声明将一个名称引入一个作用域 在c 43 43 中 xff0c 在一个作用域中重复一个声明是合法的 以下都是声明 xff1a int foo int int 函数前置声明
  • partition/stable_partition详解

    Partition 将满足条件的元素向前移动 TEMPLATE FUNCTION partition template lt class BidIt class Pr gt inline BidIt Partition BidIt Firs
  • jsoncpp解析拼装数组

    int main 数组创建与分析 例子一 string strValue 61 34 34 ldh 34 34 001 34 34 gfc 34 34 002 34 34 yyj 34 34 003 34 34 andy 34 34 005
  • 查看静态库(.lib)和动态库(.dll)的导出函数的信息

    一般情况下 xff0c 我们需要查看一个DLL或EXE中的包含的函数或是依赖的函数之类的信息 xff0c 可以使用VS自带的工具dumpbin xff1b 可以直接在命令行下输入dumpbin就可以查看他的使用说明 xff0c 如果未显示
  • do {...} while (0) 在宏定义中的作用

    http www cnblogs com lanxuezaipiao p 3535674 html 如果你是一名C程序员 xff0c 你肯定很熟悉宏 xff0c 它们非常强大 xff0c 如果正确使用可以让你的工作事半功倍 然而 xff0c
  • 即插即用型设备驱动的加载过程

    现假设驱动程序已被正确安装 xff1a 1 某种PnP总线驱动发现了即插即用设备的存在 xff1a 对于热插拔设备 xff0c 则发现过程发生于插入设备的瞬间 xff1b 如果是非热插拔设备 xff0c 则发现过程发生于系统启动时 2 Pn
  • C++如何编写属于自己的头文件 ---- 自己动手,丰衣足食

    自己动手 xff0c 丰衣足食 ps 其实这一篇文章老早以前就写了 xff0c 一直扔在草稿箱 xff0c 今天想起来了然后就发了出来 首先 xff0c 熟悉熟悉这些 是的没错 xff0c 这就是我们的Dev cpp 忽略其他东西 xff0
  • ubuntu安装vnc server-x11vnc并设置开机自动启动

    ubuntu安装x11vnc并设置开机自动启动 安装x11vnc 打开终端 xff0c 使用如下命令x11vnc span class hljs built in sudo span apt get install x11vnc 手动连接
  • 笔记本安装ubuntu18.04步骤及分区方法

    家中闲置一台08年的笔记本 xff08 没有无线无卡 xff09 xff0c 自己加装了一个2G的内存条 xff0c 食之无味弃之可惜 xff0c 思量再三准备重装Ubuntu18 04的系统当做小型服务器使用 因此记录下安装步骤以及分区方
  • 滑模控制学习笔记(三)

    滑模控制学习笔记 xff08 三 xff09 基于趋近律的滑模控制几种典型的趋近律等速趋近律指数趋近律幂次趋近律一般趋近律 基于趋近律的控制器设计仿真实例状态空间模型建立滑模控制器模型建立仿真结果 基于趋近律的滑模鲁棒控制仿真实例 基于趋近
  • 滑模控制学习笔记(六)

    滑模控制学习笔记 xff08 六 xff09 等效滑模控制等效滑模控制器设计等效控制设计滑模控制设计 仿真实例 等效滑模控制 滑模控制率可由等效控制 u e q u eq
  • 文件描述符 和 流的关系

    任何一种操作系统中 xff0c 程序在开始读写一个文件的内容之前 xff0c 必须首先在程序与文件之间建立连接或通信通道 xff0c 这一过程称为打开文件 打开一个文件的目的可以是为了读或者为了写 xff0c 也可以是即读又写 UNIX系统
  • 试用了5款BI分析工具,终于找到了上手最快的那一个!

    前几天 xff0c 领导甩给我一个任务 xff0c 考察几个BI工具 xff0c 下季度立项用 潜心做ETL的我 xff0c 对BI只是略懂 之前上的BO xff0c 由于开发模式不适应 人员用不惯 xff0c 再加上负责这块的同事走的走
  • JAVA多线程(二十一)Java多线程之SingleThreadExecutor单线程化线程池

    1 JAVA多线程 二十一 Java多线程之SingleThreadExecutor单线程化线程池 1 1 单线程化线程池SingleThreadExecutor SingleThreadExecutor 是只有一个线程的线程池 通过源代码
  • mysql: 常用函数总结以及高级函数用法

    数值型函数 函数名称作 用ABS求绝对值SQRT求二次方根MOD求余数CEIL 和 CEILING两个函数功能相同 xff0c 都是返回不小于参数的最小整数 xff0c 即向上取整FLOOR向下取整 xff0c 返回值转化为一个BIGINT
  • 双系统重装Ubuntu

    完全删除Ubuntu 1 右键此电脑 管理 磁盘管理 xff0c 删除Ubuntu所在卷 xff08 Ubuntu EFI分区无法删除 xff09 2 删除Ubuntu EFI分区 Win 43 R 输入cmd打开终端 xff0c 输入 d

随机推荐