# -*- 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. Creating default object from empty value in PHP?

      Your new environment may have E_STRICT warnings enabled in error_reporting if it is PHP <= 5.3, ...

  2. cookie学习

    cookie是储存于访问者的计算机中的变量,每当同一台计算机通过浏览器请求某个页面时,就会发送这个cookie,可以使用javascript来创建和取回cookie的值. 创建和存储cookie 首先 ...

  3. myeclipse的快捷键和myeclipse快捷键设置

    1.Ctrl+M切换窗口的大小   2.Ctrl+Q跳到最后一次的编辑处   3.F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip D ...

  4. HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页)

    前言: 在写这篇文章之前,首先感谢给我思路以及帮助过我的学长们 以下4篇博客都是学长原创,其中有很多有用的,值得学习的东西,希望能够帮到大家! 1.手把手教你用C++ 写ACM自动刷题神器(冲入HDU ...

  5. SQL Server 索引和表体系结构(二)

    转自:http://www.cnblogs.com/chenmh 非聚集索引 概述 对于非聚集索引,涉及的信息要比聚集索引更多一些,由于整个篇幅比较大涉及接下来的要写的“包含列的索引”,“索引碎片”等 ...

  6. Spring AOP:面向切面编程,AspectJ,是基于注解的方法

    面向切面编程的术语: 切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象 通知(Advice): 切面必须要完成的工作 目标(Target): 被通知的对象 代理(Pr ...

  7. 使用sql创建表并添加注释

    Create table T_ErrorLogTable_tb ( ELTID int identity(1,1) primary key,--编号 ELTTime date,--错误发生日期 ELT ...

  8. 【转】【调试技巧】Linux环境下段错误的产生原因及调试方法小结

    本文转自:http://www.cnblogs.com/panfeng412/archive/2011/11/06/segmentation-fault-in-linux.html 1. 段错误是什么 ...

  9. 用re-sign.jar重签名apk后安装失败的解决办法

    问题 打开re-sign.jar,将下载好的apk拖入re-sign.jar的界面进行重签名.重签名成功后,通过adb intall命令安装重签名后的apk文件失败.提示:Failure [INSTA ...

  10. HTML5视频标签video

    现阶段,我们要在网页中嵌入视频的最可靠最常用的办法是使用Flash,通过使用<object>和<embed>标签,就可以通过浏览器播放swf,flv等格式视频文件,但是前提是浏 ...