- [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.NORMAL
、tk.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,欢迎大家参考和讨论~