python3.5使用tkinter制作记事本
tkinter是Python下面向tk的图形界面接口库,可以方便地进行图形界面设计和交互操作编程。tkinter的优点是简单易用、与Python的结合度好。tkinter在Python3.x下默认集成,不需要额外的安装操作;不足之处为缺少合适的可视化界面设计工具,需要通过代码来完成窗口设计和元素布局。
本节采用的Python版本为3.x,如果想在python2.x下使用tkinter,请通过apt-get进行安装。需要注意的是,不同Python版本下的tkinter使用方式可能略有不同,建议采用Python3。
importtkinterastk importtkinter.scrolledtextastkst importfileinput fromtkinterimport* importos importwin32clipboard importtkinter.font t1=[] root=None defdie(event=None): root.destroy() defabout(): messagebox.showinfo(title="当前版本为1.0,欢迎使用",message="**作者:韩东\n**状态:继续努力ing") #defnewit(event): #editorit=editor() #editorit.neweditor() classeditor(): def__init__(self,rt): ifrt==None: self.t=tk.Tk() else: self.t=tk.Toplevel(rt) self.t.title("文本编辑器%d"%(len(t1)+1)) self.frm_file=tk.Frame(rt) self.frm_file.grid(row=0,column=0,padx=0,sticky=W) self.btn_open=Button(self.frm_file,text="打开",relief=GROOVE,command=self.openfile) self.btn_open.pack(side=LEFT,padx=5,fill=BOTH,expand=1) self.btn_new=Button(self.frm_file,text="新建",relief=GROOVE,command=self.neweditor) self.btn_new.pack(side=LEFT,padx=5,fill=BOTH) self.btn_save=Button(self.frm_file,text="保存",relief=GROOVE,command=self.savefile) self.btn_save.pack(side=LEFT,padx=5,fill=BOTH) self.btn_saveas=Button(self.frm_file,text="另存为",relief=GROOVE,command=self.saveasfile) self.btn_saveas.pack(side=LEFT,padx=5,fill=BOTH) self.btn_exit=Button(self.frm_file,text="退出",relief=GROOVE,command=self.close) self.btn_exit.pack(side=RIGHT,padx=5,fill=BOTH) self.frm_edit=tk.Frame(rt) self.frm_edit.grid(row=0,column=1,padx=1,sticky=W) self.btn_copy=Button(self.frm_edit,text="复制") self.btn_copy.pack(side=LEFT,padx=5,fill=BOTH,expand=1) self.btn_cut=Button(self.frm_edit,text="剪切") self.btn_cut.pack(side=LEFT,padx=5,fill=BOTH,expand=1) self.btn_paste=Button(self.frm_edit,text="黏贴") self.btn_paste.pack(side=LEFT,padx=5,fill=BOTH,expand=1) self.btn_find=Button(self.frm_edit,text="查询") self.btn_find.pack(side=LEFT,padx=5,fill=BOTH,expand=1) self.btn_allselect=Button(self.frm_edit,text="全选") self.btn_allselect.pack(side=LEFT,padx=5,fill=BOTH,expand=1) self.btn_font=Button(self.frm_edit,text="字体样式") self.btn_font.pack(side=LEFT,padx=5,fill=BOTH,expand=1) self.btn_color=Button(self.frm_edit,text="字体颜色") self.btn_color.pack(side=LEFT,padx=5,fill=BOTH,expand=1) self.bar=tk.Menu(rt) self.filem=tk.Menu(self.bar) self.filem.add_separator() self.filem.add_command(label="新建",command=self.neweditor,accelerator="Ctr+N") self.filem.bind_all("<Control-n>",self.neweditor) self.filem.add_separator() self.filem.add_command(label="打开",command=self.openfile,accelerator="Ctr+O") self.filem.bind_all("<Control-o>",self.openfile) self.filem.add_separator() self.filem.add_command(label="保存",command=self.savefile,accelerator="Ctr+S") self.filem.bind_all("<Control-s>",self.savefile) self.filem.add_separator() self.filem.add_command(label="另存为",command=self.saveasfile,accelerator="Ctr+D") self.filem.bind_all("<Control-d>",self.saveasfile) self.filem.add_command(label="关闭",command=self.close,accelerator="F4") self.filem.bind_all("<F4>",self.close) self.filem.add_separator() self.filem.add_command(label="退出",command=die,accelerator="ESC") self.filem.bind_all("<Escape>",die) self.editm=tk.Menu(self.bar) self.editm.add_separator() self.editm.add_command(label="复制",command=self.copy,accelerator=""*10+"Ctr+C") self.editm.bind_all("<Control-c>",self.copy) self.editm.add_separator() self.editm.add_command(label="黏贴",command=self.paste,accelerator=""*10+"Ctr+V") self.editm.bind_all("<Control-v>",self.paste) self.editm.add_separator() self.editm.add_command(label="剪切",command=self.cut,accelerator=""*10+"Ctr+X") self.editm.bind_all("<Control-x>",self.cut) self.editm.add_separator() self.editm.add_command(label="删除",command=self.delete_text,accelerator=""*10+"Delete") self.editm.bind_all("<Delete>",self.delete_text) self.editm.add_separator() self.editm.add_command(label="查找",command=self.find_char,accelerator=""*10+"Ctr+F") self.editm.bind_all("<Control-f>",self.find_char) self.editm.add_separator() self.editm.add_command(label="全选",command=self.select_char_all,accelerator=""*10+"Ctr+A") self.editm.bind_all("<Control-a>",self.select_char_all) self.formm=tk.Menu(self.bar) self.formm.add_command(label="字体颜色",command=self.color_it,accelerator=""*10+"Alt+C") self.formm.bind_all("<Alt-f>",self.color_it) self.formm.add_separator() self.formm.add_command(label="字体格式",command=self.font_it,accelerator=""*10+"Alt+F") self.formm.bind_all("<Alt-f>",self.font_it) self.helpm=tk.Menu(self.bar) self.helpm.add_command(label="关于",command=about) self.bar.add_cascade(label="文件",menu=self.filem) self.bar.add_cascade(label="编辑",menu=self.editm) self.bar.add_cascade(label="格式",menu=self.formm) self.bar.add_cascade(label="帮助",menu=self.helpm) self.t.config(menu=self.bar) #self.f=tk.Frame(self.t,width=512) #self.f.pack(expand=1) self.st=tkst.ScrolledText(self.t) self.st.grid(row=1,column=0,columnspan=3,pady=3) defclose(self,event=None): self.t.destroy() defopenfile(self,event=None): oname=filedialog.askopenfilename(filetypes=[("打开文件","*.txt")]) ifoname: forlineinfileinput.input(oname): self.st.insert("1.0",line) self.t.title(oname) defsavefile(self,event=None): ifos.path.isfile(self.t.title()): opf=open(self.t.title(),"w") opf.write(self.st.get(1.0,tk.END)) opf.flush() opf.close() else: sname=filedialog.asksaveasfilename(title="保存好你的宝宝哟",filetypes=[("保存文件","*.txt")],defaultextension=".txt") ifsname: ofp=open(sname,"w") ofp.write(self.st.get(1.0,tk.END)) ofp.flush() ofp.close() self.t.title(sname) defsaveasfile(self,event=None): sname=filedialog.asksaveasfilename(title="保存好你的宝宝哟",filetypes=[("保存文件","*.txt")],defaultextension=".txt") ifsname: ofp=open(sname,"w") ofp.write(self.st.get(1.0,tk.END)) ofp.flush() ofp.close() self.t.title(sname) defneweditor(self,event=None): globalroot t1.append(editor(root)) defcopy(self,event=None): text=self.st.get(tk.SEL_FIRST,tk.SEL_LAST) self.st.clipboard_clear() self.st.clipboard_append(text) defpaste(self,event=None): try: text=self.st.selection_get(selection="CLIPBOARD") self.st.insert(tk.INSERT,text) self.st.clipboard_clear() excepttk.TclError: pass defcut(self,event=None): text=self.st.get(tk.SEL_FIRST,tk.SEL_LAST) self.st.delete(tk.SEL_FIRST,tk.SEL_LAST) self.st.clipboard_clear() self.st.clipboard_append(text) defdelete_text(self): self.st.delete(tk.SEL_FIRST,tk.SEL_LAST) deffind_char(self,event=None): target=simpledialog.askstring("简易文本编辑器","寻找字符串") iftarget: end=self.st.index(tk.END) print(end) endindex=end.split(".") end_line=int(endindex[0]) end_column=int(endindex[1]) pos_line=1 pos_column=0 length=len(target) whilepos_line<=end_line: ifpos_line==end_lineandpos_column+length>end_column: break elifpos_line<end_lineandpos_column+length>500: pos_line=pos_line+1 pos_column=(pos_column+length)-500 ifpos_column>end_column: break else: pos=str(pos_line)+"."+str(pos_column) where=self.st.search(target,pos,tk.END) ifwhere: print(where) where1=where.split(".") sele_end_col=str(int(where1[1])+length) sele=where1[0]+"."+sele_end_col self.st.tag_add(tk.SEL,where,sele) self.st.mark_set(tk.INSERT,sele) self.st.see(tk.INSERT) self.st.focus() again=messagebox.askokcancel(title="继续查询么") ifagain: pos_line=int(where1[0]) pos_column=int(sele_end_col) else: aa=messagebox.showinfo(title="你终于还是放弃了我",message="你放弃了我--!") ifaa: sys.exit() defselect_char_all(self,event=None): self.st.tag_add(tk.SEL,1.0,tk.END) self.st.see(tk.INSERT) self.st.focus() defcolor_it(self,event=None): color=colorchooser.askcolor() self.st["foreground"]=color[1] deffont_it(self,event=None): self.t_font=tk.Toplevel() self.t_font.title("字体选择面板") self.label_size=Label(self.t_font,text="字体大小") self.label_shape=Label(self.t_font,text="字体形状") self.label_font=Label(self.t_font,text="字体类型") self.label_weight=Label(self.t_font,text="字体粗细") self.label_size.grid(row=0,column=0,padx=30) self.label_shape.grid(row=0,column=4,padx=30) self.label_font.grid(row=0,column=2,padx=30) self.label_weight.grid(row=0,column=6,padx=30) self.scroll_size=Scrollbar(self.t_font) self.scroll_size.grid(row=1,column=1,stick=NS) self.scroll_shape=Scrollbar(self.t_font) self.scroll_shape.grid(row=1,column=3,stick=NS) self.scroll_font=Scrollbar(self.t_font) self.scroll_font.grid(row=1,column=5,stick=NS) self.scroll_weight=Scrollbar(self.t_font) self.scroll_weight.grid(row=1,column=7,stick=NS) list_var_font=StringVar() list_var_size=StringVar() list_var_shape=StringVar() list_var_weight=StringVar() self.list_font=Listbox(self.t_font,selectmode=BROWSE,listvariable=list_var_font,exportselection=0) self.list_font.grid(row=1,column=2,padx=4) list_font_item=["\"Arial\"","\"ArialBaltic\"","\"ArialBlack\"","\"ArialCE\"","\"ArialCYR\"","\"ArialGreek\"","\"ArialNarrow\"", "\"ArialTUR\"","\"BaiduanNumber\"","\"Batang,BatangChe\""] foriteminlist_font_item: self.list_font.insert(0,item) self.list_font.bind("<ButtonRelease-1>",self.change_font) self.list_shape=Listbox(self.t_font,selectmode=BROWSE,listvariable=list_var_shape,exportselection=0) self.list_shape.grid(row=1,column=4,padx=4) list_shape_item=["italic","roman"] foriteminlist_shape_item: self.list_shape.insert(0,item) self.list_shape.bind("<ButtonRelease-1>",self.change_shape) self.list_size=Listbox(self.t_font,selectmode=BROWSE,listvariable=list_var_size,exportselection=0) self.list_size.grid(row=1,column=0,padx=4) list_size_item=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] foriteminlist_size_item: self.list_size.insert(0,item) self.list_size.bind("<ButtonRelease-1>",self.change_size) self.list_weight=Listbox(self.t_font,selectmode=BROWSE,listvariable=list_var_weight,exportselection=0) self.list_weight.grid(row=1,column=6,padx=4) list_weight_item=["bold","normal"] foriteminlist_weight_item: self.list_weight.insert(0,item) self.list_weight.bind("<ButtonRelease-1>",self.change_weight) self.labFra_display=LabelFrame(self.t_font,text="字体样式演示区域") self.labFra_display.grid(row=2,column=0,pady=4) self.lab_display=Label(self.labFra_display,text="我在这里") self.lab_display.pack() self.btn_ok=Button(self.t_font,text="确定",width=10,height=2,command=self.change) self.btn_ok.grid(row=2,column=2,pady=4) self.btn_cancel=Button(self.t_font,width=10,height=2,text="取消",command=self.exit_subwindow) self.btn_cancel.grid(row=2,column=4,pady=4) defchange_size(self,event): tk.customFont=font.Font(family="Helvetica",size=12,weight="normal",slant="roman",underline=0) size=tk.customFont["size"] tk.customFont.configure(size=self.list_size.get(self.list_size.curselection())) self.st.config(font=tk.customFont) self.size_count=1 pass defchange_font(self,event): tk.customFont=font.Font(family="Helvetica",size=12,weight="normal",slant="roman",underline=0) family=tk.customFont["family"] tk.customFont.configure(family=self.list_font.get(self.list_font.curselection())) self.st.config(font=tk.customFont) self.font_count=1 pass defchange_shape(self,event): tk.customFont=font.Font(family="Helvetica",size=12,weight="normal",slant="roman",underline=0) slant=tk.customFont["slant"] tk.customFont.configure(slant=self.list_shape.get(self.list_shape.curselection())) self.st.config(font=tk.customFont) self.shape_count=1 pass defchange_weight(self,event): tk.customFont=font.Font(family="Helvetica",size=12,weight="normal",slant="roman",underline=0) weight=tk.customFont["weight"] tk.customFont.configure(weight=self.list_weight.get(self.list_weight.curselection())) self.st.config(font=tk.customFont) self.shape_count=1 defchange(self,event): pass #self.st["font"]=(self.list_size.get(self.list_size.curselection())) #self.st["font"]=(self.list_font.get(self.list_font.curselection())) #self.st["font"]=(self.list_shape.get(self.list_shape.curselection())) defexit_subwindow(self): self.t_font.destroy() if__name__=="__main__": root=None t1.append(editor(root)) root=t1[0].t root.mainloop()
以上就是本文给大家分享的代码了,希望大家能够喜欢