使用python3.5仿微软记事本notepad


Posted in Python onJune 15, 2016

本文实例为大家分享了python3.5仿微软记事本的具体代码,供大家参考,具体内容如下

from tkinter import filedialog
import tkinter as tk
import tkinter.scrolledtext as tkst
from tkinter import messagebox
import fileinput
from tkinter import *
from os 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程序设计有所帮助。

Python 相关文章推荐
Python3基础之条件与循环控制实例解析
Aug 13 Python
Python多线程编程(四):使用Lock互斥锁
Apr 05 Python
python3.x实现发送邮件功能
May 22 Python
Python并发之多进程的方法实例代码
Aug 15 Python
python获取交互式ssh shell的方法
Feb 14 Python
Pyinstaller 打包exe教程及问题解决
Aug 16 Python
python自动化测试之异常及日志操作实例分析
Nov 09 Python
python中dict()的高级用法实现
Nov 13 Python
python如何将两张图片生成为全景图片
Mar 05 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
结束运行python的方法
Jun 16 Python
利用python 读写csv文件
Sep 10 Python
python3.5仿微软计算器程序
Mar 30 #Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 #Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 #Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 #Python
浅谈python新手中常见的疑惑及解答
Jun 14 #Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 #Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 #Python
You might like
资料注册后发信小技巧
2006/10/09 PHP
文件上传的实现
2006/10/09 PHP
php 采集书并合成txt格式的实现代码
2009/03/01 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
React中的refs的使用教程
2018/02/13 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
Python实现统计单词出现的个数
2015/05/28 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
PHP统计代码行数的小代码
2019/09/19 Python
下载官网python并安装的步骤详解
2019/10/12 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
美国美妆网站:B-Glowing
2016/10/12 全球购物
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
Ajax的优点和缺点
2014/11/21 面试题
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
房屋认购协议书
2015/01/29 职场文书
长江三峡导游词
2015/01/31 职场文书
财务会计求职信范文
2015/03/20 职场文书
计算机教师工作总结
2015/08/13 职场文书