- [x] checked
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'))
		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,''))
		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:
			try:
				display.destroy()
			except:
			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()

增加四行代码:

		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()

处理选择框,如果不带x,那就是不选中的,如果带x,那就是选中的。
其中用到了Checkbutton的参数state表示选择框的状态,可供选择的值有tk.NORMALtk.DISABLED等,默认为tk.NORMAL,即为正常选择框,设为tk.DISABLED时,为禁用选择框。select函数是勾选选择框的函数。无参数。
效果:
效果

《python实现markdown编辑器-5》 python实现markdown编辑器前言开始markdown基本语法1号标题2号标题3号标题4号标题5号标题6号标题 markdown编辑器真难找。。。。。。 这次主要捋一下思路 markdown基本语法 加粗第一种 加粗第二种 斜体第一种 斜体第二种 正常文字下标上标 无序列表第一种 无序列表第二种 无序列表第三种 未选定选择框 选定选择框 单行代码片 注:Qt 是指 C++ Qt,PyQt 就是指 PyQt 在 Qt 和 PyQt 中的 QTextBrowser、QTextEdit等控件都有一个函数: ui->XXX->setMarkdown("XXX"); // Qt XXX.setMarkdown("XXX"); # PyQt 那么能不能用呢?当然是可以的,下面是一个示例: 还记得在上篇提到的rest-framework,文档中提到了markdown也是可选应用。那么这篇我们就来尝试使用markdown来制作一个在线的可以预览的editor。安装 Python Markdownpip install markdown使用起来简单地就是两个函数:markdown(text)markdownFromFile(input, output)markdown(text)会直接把... 其余使用tkinter,主要因为只会tkinter,wx和pyqt5不会用 什么!你没有tkinter!没关系,我的ubuntu也没有。。。 sudo apt-get install python3-tkinter 为什么?你也不看看pip能不能用(pip无法 Markdown是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版。它使用易读易写的纯文本格式编写文档,可与HTML混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。因简洁、高效、易读、易写,Markdown被大量使用,如Github、Wikipedia、简书等。 最近在做一个应用,需要简单的markdown编辑功能,主要是因为不希望应用程序太大,没有使用QWebview实现,转而使用自定义的QTextBrowser和QPlainTextEdit来实现,整个release版本也就20Mb以内,主要是一些Qt的dll,感觉效果还不错。 如果可以的话,后期开源到Github,欢迎大家参考和讨论~