python实现markdown编辑器-2

python实现markdown编辑器

前言

开始

markdown文件读取:

 import tkinter as tk
 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)

非常易懂,这里不解释,如果看不懂,那还不如不看这篇文章,这篇文章的技术含量略高,我在这里打好预防针啊。

标题

 # 1号标题
 ## 2号标题
 ### 3号标题
 #### 4号标题
 ##### 5号标题
 ###### 6号标题

这个好实现,就是字体大小问题

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
	for i in cont.split('\n'):
		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'))
		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,cont)
if(__name__ == '__main__'):
	main()

效果:
效果

fontname为渲染markdown使用的字体,请自行选择。
这里简单说一下,tkinter.Label中的形参里有一个text,是一个三元组,第一项是字体,第二项是字号,第三项是格式,有bolditalicunderline等,用空格分割。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值