# -*- coding=utf-8 -*-
from tkinter import filedialog
import tkinter as tk
import tkinter.scrolledtext as tkst
from tkinter import messagebox
import fileinput
from tkinter import *
import os
import time t1 = []
root = None def die():
root.destroy() def about():
messagebox.showinfo(title = "当前版本为1.0,欢迎使用",message = "**作者:韩东\n**状态:继续努力ing")
class editor:
def __init__(self,rt):
if rt == None:
self.t = tk.Tk()
else:
self.t = tk.Toplevel(rt)
self.t.title("文本编辑器%d" % (len(t1)+1))
self.bar = tk.Menu(rt) self.filem = tk.Menu(self.bar)
self.filem.add_separator()
self.filem.add_command(label = "新建",command = self.neweditor)
self.filem.add_separator()
self.filem.add_command(label = "打开",command = self.openfile)
self.filem.add_separator()
self.filem.add_command(label = "保存",command = self.savefile)
self.filem.add_separator()
self.filem.add_command(label = "关闭",command = self.close)
self.filem.add_separator()
self.filem.add_command(label = "退出",command = die) self.editm = tk.Menu(self.bar)
self.editm.add_separator()
self.editm.add_command(label = "复制",command = self.copy)
self.editm.add_separator()
self.editm.add_command(label = "黏贴",command = self.paste)
self.editm.add_separator()
self.editm.add_command(label = "剪切",command = self.cut)
self.editm.add_separator()
self.editm.add_command(label = "删除",command = self.delete_text)
self.editm.add_separator()
self.editm.add_command(label = "查找",command = self.find_char)
self.editm.add_separator()
self.editm.add_command(label = "全选",command = self.select_char_all) self.helpm = tk.Menu(self.bar)
self.helpm.add_command(label = "关于",command = about)
self.bar.add_cascade(label = "文件",menu = self.filem)
self.bar.add_cascade(label = "编辑",menu = self.editm)
self.bar.add_cascade(label = "帮助",menu = self.helpm) self.t.config(menu = self.bar) self.f = tk.Frame(self.t,width = 512)
self.f.pack(expand =1) self.st = tkst.ScrolledText(self.t)
self.st.pack(expand = 1) def close(self):
self.t.destroy()
def openfile(self):
oname = filedialog.askopenfilename(filetypes = [("打开文件","*.txt")])
if oname:
for line in fileinput.input(oname):
self.st.insert("1.0",line)
self.t.title(oname) def savefile(self):
sname = filedialog.asksaveasfilename(title = "保存好你的宝宝哟",filetypes = [("保存文件","*.txt")])
if sname:
ofp = open(sname,"a")
ofp.write(self.st.get(1.0,tk.END))
ofp.flush()
ofp.close()
self.t.title(sname) def neweditor(self):
global root
t1.append(editor(root))
def copy(self):
text = self.st.get(tk.SEL_FIRST,tk.SEL_LAST)
self.st.clipboard_clear()
self.st.clipboard_append(text)
def paste(self):
try:
text = self.st.selection_get(selection = "CLIPBOARD")
self.st.insert(tk.INSERT,text)
except tk.TclError:
pass def cut(self):
text = self.st.get(tk.SEL_FIRST,tk.SEL_LAST)
self.st.delete(tk.SEL_FIRST,tk.SEL_LAST)
self.st.clipboard_clear()
self.st.clipboard_append(text) def delete_text(self):
self.st.delete(tk.SEL_FIRST,tk.SEL_LAST) def find_char(self):
target = simpledialog.askstring("简易文本编辑器","寻找字符串")
if target:
end = self.st.index(tk.END)
endindex = end.split(".")
end_line = int(endindex[0])
end_column = int(endindex[1])
pos_line =1
pos_column=0
length =len(target)
while pos_line <= end_line :
if pos_line == end_line and pos_column +length > end_column:
break
elif pos_line < end_line and pos_column + length >100:
pos_line = pos_line + 1
pos_column = 100 - (pos_column + length)
if pos_column > end_column:
break
else:
pos = str(pos_line)+"."+str(pos_column)
where = self.st.search(target,pos,tk.END)
if where:
print(where)
where1 =where.split(".")
sele_end_col = str(int(where1[1])+length)
sele = where1[0] + "."+ sele_end_col
self.st.tag_add(tk.SEL,where,sele)
self.st.mark_set(tk.INSERT,sele)
self.st.see(tk.INSERT)
#self.st.focus() again = messagebox.askokcancel(title = "继续查询么")
if again:
pos_line = int(where1[0])
pos_column = int(sele_end_col)
else:
aa=messagebox.showinfo(title = "你终于还是放弃了我",message = "你放弃了我--!")
if aa:
sys.exit() def select_char_all(self):
self.st.tag_add(tk.SEL,1.0,tk.END)
self.st.see(tk.INSERT)
self.st.focus()
if __name__ == "__main__":
root = None
t1.append(editor(root))
root = t1[0].t
root.mainloop()

效果:

python仿微软记事本的更多相关文章

  1. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  2. 使用Ant Design写一个仿微软ToDo

    实习期的第一份活,自己看Ant Design的官网学习,然后用Ant Design写一个仿微软ToDo. 不做教学目的,只是记录一下. 1.学习 Ant Design 是个组件库,想要会用,至少要知道 ...

  3. 一行导出所有任意微软SQL server数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解

    文章标题: 一行导出所有任意微软SQL serer数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解 关键字 : mssql-scripter,SQL Server 文章分 ...

  4. Python编写的记事本小程序

    用Python中的Tkinter模块写的一个简单的记事本程序,Python2.x和Python3.x的许多内置函数有所改变,所以以下分为Python2.x和Python3.x版本. 一.效果展示: 二 ...

  5. python 去除微软的BOM

    傻逼微软会给文件前面加上efbbbf, 导致开发人员浪费很多时间在排错上,下面通过python代码来实现去除微软BOM的功能 用法很简单,指定可能含有BOM开头的文件,并且将微软的\r\n 换成lin ...

  6. Python开发简单记事本

    摘要: 本文是使用Python,结合Tkinter开发简单记事本. 本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能. 最近很想对p ...

  7. 15行Python 仿百度搜索引擎

    开发工具:PyCharm 开发环境:python3.6 + flask + requests 开发流程: 1. 启动一个web服务 from flask import Flask app = Flas ...

  8. ASP.NET MVC多语言 仿微软网站效果(转)

    本文转自: https://blog.csdn.net/Cooldiok/article/details/7831351 2017年10月22日 21:31:22 Cooldiok 微软作为ASP.N ...

  9. ASP.NET MVC多语言 仿微软网站效果

    文章转载自:https://blog.csdn.net/cooldiok/article/details/78313513 微软作为ASP.NET的创造者,它对于官网的结构设计肯定有值得我们借鉴和参考 ...

随机推荐

  1. string转换成color转

    string转换成color             string col = "#FF8400";            this.BackColor = System.Draw ...

  2. SpringMVC 接收ajax发送的数组对象

    本文粘贴自:http://my.oschina.net/jiefalcon/blog/384153?fromerr=24Lewn46 [转]SpringMVC @RequestBody接收Json对象 ...

  3. [ios][opengles]GLKit如何搭一个app的框架

    一个外文对GLKit的讲解: Beginning OpenGL ES 2.0 with GLKit Part 1    英文原文链接:http://www.raywenderlich.com/5223 ...

  4. Improving the GPA 分类: 贪心 HDU 比赛 2015-08-08 16:12 11人阅读 评论(0) 收藏

    Improving the GPA Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...

  5. php 基础复习(2)GD库

    一,生成验证码: 1.生成一张图片: recource imagecreatetruecolor(int $width , int $height)  注意:提前输出图片的header信息,默认是黑色 ...

  6. uploadify的用法与动态传参 提供demo下载

    ---恢复内容开始--- 官网:http://www.uploadify.com/   一款不错的上传插件.官方文档http://www.uploadify.com/documentation/ 用法 ...

  7. Easyui Layout Center 全屏方法扩展

    $.extend($.fn.layout.methods, { full : function (jq) { return jq.each(function () { var layout = $(t ...

  8. 什么是“鸭子类型(duck typing)”?

    在计算机编程世界里会接触到一个知识点 —— duck typing,叫“鸭子类型”.   它有一个形象的解释: “当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子. ...

  9. mvc api

    ===============================首页===================================================== 扫码 快递公司接口uri: ...

  10. sqlitehelper封装

    appsettings <configuration>    <appSettings>        <add key="ConnectionString&q ...