鱼C论坛

 找回密码
 立即注册
查看: 7285|回复: 38

[作品展示] python3写的记事本

[复制链接]
发表于 2016-1-29 16:29:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 小小大鱼 于 2016-3-19 14:49 编辑

之前看到有人发了记事本,而且还更新,最近在学tkinter,然后也摸索着写了一个,功能相当简陋,有些功能暂时还实现不了......而且还很丑。
完整代码在下面......


3.19日更新:
本来是3.18更新,结果恢复了,什么也没有,今天重新更新。
notepad.png

1.实现左侧显示行号功能
2.右下角显示当前光标位置
3.取消代码隐藏

还有一些bug,也希望大家能帮我指出来,帮我改进。
比如:RuntimeError: main thread is not in main loop这个错误还不知道怎么处理。
没能实现滚动条
  1. from tkinter import *
  2. from tkinter.messagebox import *
  3. from tkinter.filedialog import *
  4. from threading import Timer
  5. import string

  6. #定义一个添加菜单的类,想加什么菜单直接调用即可,副作用是没法加分隔线
  7. class menuNameAccCom:
  8.     def __init__(self,menuname,menucom,menuacc):
  9.         self.menuname=menuname
  10.         self.menuacc=menuacc
  11.         self.menucom=menucom

  12.     def addmenu(self,wigetName):
  13.         for (name,com,acc) in (zip(self.menuname,self.menucom,self.menuacc)):
  14.             wigetName.add_command(label=name,accelerator=acc,command=com)

  15. filename=''
  16. def openfile():
  17.     global filename
  18.     filename = askopenfilename(defaultextension='.txt')
  19.     if filename == '':
  20.         filename = None
  21.     else:
  22.         root.title('FileName:'+os.path.basename(filename))
  23.         textPad.delete(1.0,END)#delete all
  24.         f = open(filename,'r')
  25.         textPad.insert(1.0,f.read())
  26.         f.close()

  27. def newfile():
  28.     global FileName
  29.     root.title('new file')
  30.     filename = None
  31.     textPad.delete(1.0,END)

  32. def savefile():
  33.     global filename
  34.     try:
  35.         f = open(filename,'w')
  36.         msg = textPad.get(1.0,END)
  37.         f.write(msg)
  38.         f.close()
  39.     except:
  40.         saveas()

  41. def saveas():
  42.     global filename
  43.     f = asksaveasfilename(initialfile = 'newfile',defaultextension ='.txt')
  44.     filename = f
  45.     fh = open(f,'w')
  46.     msg = textPad.get(1.0,END)
  47.     fh.write(msg)
  48.     fh.close()
  49.     root.title('FileName:'+os.path.basename(f))

  50. def cut():
  51.     textPad.event_generate('<<Cut>>')

  52. def copy():
  53.     textPad.event_generate('<<Copy>>')

  54. def paste():
  55.     textPad.event_generate('<<Paste>>')

  56. def redo():
  57.     textPad.event_generate('<<Redo>>')

  58. def undo():
  59.     textPad.event_generate('<<Undo>>')

  60. def selectall():
  61.     textPad.tag_add('sel',1.0,END)

  62. def search():
  63.     topsearch=Toplevel(root)
  64.     topsearch.geometry('300x30+200+250')
  65.     labell=Label(topsearch,text='find')
  66.     labell.grid(row=0,column=0,padx=5)
  67.     entry1=Entry(topsearch,width=28)
  68.     entry1.grid(row=0,column=1,padx=5)
  69.     button1=Button(topsearch,text='find')
  70.     button1.grid(row=0,column=2)

  71. def addButton(name,command):
  72.     for (toolname ,toolcom) in zip(name,command):
  73.         shortButton = Button(toolbar,text=toolname,relief='groove',command=toolcom)
  74.         shortButton.pack(side=LEFT,padx=2,pady=5)

  75. root = Tk()
  76. root.title('Andy Note')
  77. root.geometry('800x500+100+100')

  78. menubar = Menu(root)
  79. root.config(menu= menubar)

  80. #文件菜单
  81. filemenu = Menu(menubar,tearoff=False)
  82. filemenuName = ('New','Open','Save','Save as')
  83. filemenuAcc = ('Ctrl+N','Ctrl+O','Ctrl+S','Ctrl+Shift+S')
  84. filemenuCom = (newfile,openfile,savefile,saveas)

  85. filem = menuNameAccCom(filemenuName,filemenuCom,filemenuAcc)#调用添加菜单的类
  86. filem.addmenu(filemenu)
  87. menubar.add_cascade(label='File',menu=filemenu)

  88. #编辑菜单
  89. editmenu = Menu(menubar,tearoff=False)
  90. editmenuName = ('Undo','Redo','Cut','Copy','Paste','Select All')
  91. editmenuAcc = ('Ctrl+Z','Ctrl+Y','Ctrl+X','Ctrl+C','Ctrl+V','Ctrl+A')
  92. editmenuCom = (undo,redo,cut,copy,paste,selectall)

  93. editm = menuNameAccCom(editmenuName,editmenuCom,editmenuAcc)#调用添加菜单的类
  94. editm.addmenu(editmenu)
  95. menubar.add_cascade(label='Edit',menu=editmenu)

  96. findmenu = Menu(menubar,tearoff=False)
  97. findmenu.add_command(label='Find',accelerator='Ctrl+F',command=search)
  98. menubar.add_cascade(label='Find',menu=findmenu)

  99. #按钮
  100. toolbar = Frame(root,height=20)
  101. toolbarName = ('New','Open','Save','SaveAs','Undo','Redo','Cut','Copy','Paste','SelectAll')
  102. toolbarCommand = (newfile,openfile,savefile,saveas,undo,redo,cut,copy,paste,selectall)

  103. addButton(toolbarName,toolbarCommand) #调用添加按钮的函数
  104. toolbar.pack(fill=X)

  105. # line_number
  106. v1= StringVar()
  107. line =  Label(root, widt=4, font ='consolas', justify=RIGHT, anchor=N, textvariable=v1, text ='1')
  108. line.pack(side=LEFT,fill=Y)

  109. textPad = Text(root,undo=True, font ='consolas')
  110. textPad.pack(expand=YES,fill=BOTH)
  111. textPad.focus_set()

  112. scroll = Scrollbar(textPad)
  113. textPad.config(yscrollcommand=scroll.set)
  114. scroll.config(command=textPad.yview)
  115. scroll.pack(side=RIGHT,fill=Y)

  116. timer_interval = 1
  117. def getline():
  118.     global t,row
  119.     row,col = textPad.index(INSERT).split('.')
  120.     lineNum = 'Ln:  ' +row+'   '+'Co:  '+col
  121.     var.set(lineNum)
  122.    
  123.     t = Timer(timer_interval,getline)
  124.     t.start()

  125.     r,l = textPad.index(END).split('.')
  126.     line_n = [str(i)+'\n' for i in range(1, int(r))]
  127.     s = ''
  128.     for i in line_n:
  129.         s = s + i

  130.     v1.set(s)


  131. t = Timer(timer_interval,getline)
  132. t.start()
  133.    
  134. var = StringVar()
  135. status = Label(root,anchor=E,height=1,text='Ln',relief=FLAT,takefocus=False,textvariable=var,padx=2)
  136. status.pack(fill=X)

  137. if __name__ == '__main__':
  138.     mainloop()
复制代码

评分

参与人数 3荣誉 +13 鱼币 +14 贡献 +11 收起 理由
542624047 + 3 + 4 + 2 鼓励一下
拈花小仙 + 5 + 5 + 4
康小泡 + 5 + 5 + 5 支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-29 16:43:27 | 显示全部楼层
看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-30 22:05:26 | 显示全部楼层
python3写的记事本
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-30 22:50:45 | 显示全部楼层
学习一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-31 00:01:38 | 显示全部楼层
先复制 再学习一下~~ 谢了~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-31 01:51:16 | 显示全部楼层
666666666666
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-31 21:34:54 | 显示全部楼层
观摩一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-31 22:06:47 | 显示全部楼层
学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-31 23:29:24 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-1 09:23:52 | 显示全部楼层
代码上的颜色字体,酷炫啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-1 15:11:12 | 显示全部楼层
欣赏下大神写的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-1 17:38:26 | 显示全部楼层
这么厉害
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-2 09:28:50 | 显示全部楼层
学习下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-2 11:31:21 | 显示全部楼层
不爱穿内裤 发表于 2016-2-1 09:23
代码上的颜色字体,酷炫啊!

用的sublime text3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-2 11:32:26 | 显示全部楼层

慢慢学的,有些功能还实现不了,学习中....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-2 16:51:57 | 显示全部楼层
{:10_277:学习下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-2 20:58:14 | 显示全部楼层
6666楼主牛b
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-3 18:03:35 | 显示全部楼层
看看学习下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-3 18:28:59 | 显示全部楼层
回复看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-4 09:45:23 | 显示全部楼层
哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-16 04:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表