前言
开始
代码片
因为前面示例里的代码片示例效果不明显,所以我换了一个
# 1号标题
## 2号标题
### 3号标题
#### 4号标题
##### 5号标题
###### 6号标题
- 无序列表第一种
* 无序列表第二种
+ 无序列表第三种
1. test
2. test
3. test
- [ ] unchecked
- [x] checked
` ` `
import this
` ` `
单行代码片和字体格式待会一起讲
多行代码片,思路就是弄一个disable的Text,在里面插入代码
from tkinter.filedialog import askopenfilename as aof,asksaveasfilename as asf
from tkinter.messagebox import askyesno as askyn
import tkinter as tk
fontname = ...
writer = tk.Tk()
display = tk.Tk()
widgets = []
text = tk.Text(writer)
text.grid(row=0,column=0)
cont = ''
def read_md(file):
with open(file) as f:
return f.read()
def write_md(file,cont):
with open(file,'w') as f:
f.write(cont)
def clear():
for i in widgets:
i.grid_forget()
def render_md():
display.update()
clear()
l = 0
code = False
buf = ''
for i in cont.split('\n'):
if(code and i != '```'):
buf += i + '\n'
continue
if(i.startswith('# ')):
lb = tk.Label(display,text=i[2:],font=(fontname,40,'bold'))
elif(i.startswith('## ')):
lb = tk.Label(display,text=i[3:],font=(fontname,35,'bold'))
elif(i.startswith('### ')):
lb = tk.Label(display,text=i[4:],font=(fontname,30,'bold'))
elif(i.startswith('#### ')):
lb = tk.Label(display,text=i[5:],font=(fontname,25,'bold'))
elif(i.startswith('##### ')):
lb = tk.Label(display,text=i[6:],font=(fontname,20,'bold'))
elif(i.startswith('###### ')):
lb = tk.Label(display,text=i[7:],font=(fontname,15,'bold'))
elif(i.startswith('- [ ] ')):
lb = tk.Checkbutton(display,text=i[6:],state=tk.DISABLED)
elif(i.startswith('- [x] ')):
lb = tk.Checkbutton(display,text=i[6:],state=tk.DISABLED)
lb.select()
elif(i.startswith('- ') or i.startswith('* ') or i.startswith('+ ')):
i = '● ' + i[2:]
lb = tk.Label(display,text=i,font=(fontname,15,''))
elif(i == '```'):
if(code):
lb = tk.Text(display)
lb.insert(0.0,buf)
h = float(lb.index(tk.END)) - 2
lb.config(height=h)
buf = ''
code = False
else:
code = True
continue
else:
lb = tk.Label(display,text=i,font=(fontname,15,''))
lb.grid(row=l,column=0,sticky='w')
widgets.append(lb)
l += 1
def update_writer():
global cont
writer.update()
cont = text.get(0.0,tk.END)
def main():
global cont
writer.title('writer')
display.title('displayer')
file = aof(title='open a markdown file')
if(file):
cont = read_md(file)
text.insert(0.0,cont)
while(1):
try:
update_writer()
render_md()
except:
try:
writer.destroy()
except:
pass
try:
display.destroy()
except:
pass
tk.Tk().withdraw()
if(file):
write_md(file,cont)
else:
while(1):
file = asf(title='save as ...')
if(not file):
if(not askyn('Do you want to keep this new document?','Do you want to keep this new document?')):
exit()
write_md(file)
if(__name__ == '__main__'):
main()
效果:
《python实现markdown编辑器-6》
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)