码迷,mamicode.com
首页 > 编程语言 > 详细

python--tkinter桌面编程开发--记事本

时间:2016-07-28 14:22:10      阅读:989      评论:0      收藏:0      [点我收藏+]

标签:

  • 什么是TK\Tkinter
    • Tkinter是连接Python和TK图形库的一个纽带(接口)
  • Hello Tkinter
    • 技术分享
      from  tkinter import *
      root=Tk() #tk类的一个实例    显示一个窗口
      label=Label(root,text=Hello world!)
      label.pack() #显示
      
      root.mainloop()#进入死循环  让窗口一直显示
      View Code
  • Hello tkinter扩展
  • 技术分享
    #coding=gbk
    #将tkinter封装
    from tkinter import Frame, Button
    from tkinter import *
    
    class App:
        def __init__(self,master):#maseter 根窗体的一个实例
            frame=Frame(master) #frame是在root  window上的东西,父窗体是root  windows
            frame.pack()
             #Button是frame上面的东西
            self.button=Button(frame,text=Hello class,fg=red,command=frame.quit) #frame上面有一个button
            
            self.button.pack()#显示
            
            self.hiButton=Button(frame,text=say hi,command=self.say_hi)
            self.hiButton.pack()
        def say_hi(self):
            print(hi fuzhiqiang,thanks!)
            
    root=Tk()
    app=App(root)
    root.mainloop()
    View Code
  • GUI类库设计架构-Tkinter架构
    • UI的结构底层的容器窗体:root window,在root上面就会有一些容器的UI,在UI的上面又会有一些其他的UI
    • 分类:
      • widget(显示)
      • WM(管理:窗体的显示,添加,例如pack()),
      • event(事件传导机制):输入事件,状态事件(鼠标的挪进挪出),管理事件(窗体的生命周期的消亡)

详细的窗体的文本:http://effbot.org/tkinterbook/tkinter-classes.htm

  • config配置外观
  • 技术分享
    #coding=gbk
    from  tkinter import *
    root=Tk() #tk类的一个实例    显示一个窗口
    label=Label(root,text=Hello world!)
    
    label.config(cursor=gumby)#config  配置   当忘记了一些东西,可以通过这个配置
    label.config(width=80,height=10,fg=yellow,bg=dark green)
    label.config(font=(times,28,bold))#font也是一个list
    label.pack() #显示
    
    root.mainloop()#进入死循环  让窗口一直显示
    View Code
  • widget  style组件外观属性
    • http://effbot.org/tkinterbook/tkinter-widget-styling.htm         在这个网站上有可以配置的外观属性,上去查阅就行
    • 技术分享
      #coding=gbk
      from  tkinter import *
      
      button=Button(text=fuzhiqiangButton,padx=150,pady=50)  #布局相关的padx   X轴的间距
      button.config(cursor=gumby)
      button.config(bd=8,relief=RAISED)  #bd  边界     relief  图标效果
      button.config(bg=green,fg=yellow) #背景色
      button.config(font=(Helvetica,10,bold italic)) #字体
      button.pack()
      button.mainloop()
      View Code
  • 事件Events 和 Bindings
    • 事件的分类
      • enentformats:<Button-1>点击左键<Button-2>点击右键<B1-Motion>左键移动<ButtonRelease-1>左键释放<Double-Button-1>双击左键<Enter>进入<Leave>离开<FocusIn><FocusOut><Return><Key>
      • enent attributes:widget,x,y,x_root,y_root,keycode(),num(),width,height,type
      • protocol
    • 实现事件方式
      • command    按钮级别
      • bind(绑定)  按钮级别
      • protacl(协议监听)系统级别
    • 技术分享
      #coding=gbk
      from  tkinter import *
      import tkinter.messagebox
      root=Tk()
      
      # def button1Click():  #回调函数
      #     print(‘button clicked‘)
      # button=Button(text=‘hello ‘,command=button1Click)#调用一个函数     command 回调
      # button.pack()
      # button.mainloop()
      
      def callback(event):
          frame.focus_set()#点击前得到一个焦点
          print(clicked at:,event.x,event.y)#打印出这个焦点的坐标
      
      def key(event):
          print(pressed,repr(event.char))#把字符打印
          
      def closeWindow():
          if tkinter.messagebox.askokcancel(Quit,do you want to exit):
              root.destroy()
          
          
          
      frame=Frame(root,width=100,height=100)  #Frame相当于一个容器
      frame.bind(<Button-1>,callback )  #绑定函数   左键点击
      frame.bind(<Key>,key)
      frame.pack()
      
      root.protocol(WM_DELETE_WINDOW,closeWindow)
      
      root.mainloop()
      View Code
  • BaseWindow-TopLevel
    • 在一个窗体上面弹出一个新的窗体:依靠TopLevel
    • 技术分享
      #coding=gbk
      from  tkinter import *
      
      root=Tk()
      root.title(root window)
      top=Toplevel(bg=red)#新建了一个窗体   Frame只是一个区域的容器放在窗体中,TopLevel是弹出了一个新的窗体
      top.title(top level)
      root.mainloop()
      View Code
  • c菜单
    • 技术分享
      #coding=gbk
      from  tkinter import *
      
      def callback():#菜单点击回调函数
          print(called the menu)
          
      root=Tk()
      menu=Menu(root)#菜单对象,在root上面
      root.config(menu=menu)#第一个menu是属性名称,第二个是值
      
      filemenu=Menu(menu)#这里的menu的父菜单是  menu=Menu(root)中的menu
      menu.add_cascade(label=File,menu=filemenu)#添加一个子菜单  filemenu
      filemenu.add_command(label=New,command=callback)#子菜单的一些内容设置
      filemenu.add_command(label=Open,command=callback)
      filemenu.add_separator()                          #添加一个下划线
      filemenu.add_command(label=Exit,command=callback)
      
      helpmenu=Menu(menu)#和上面类似
      menu.add_command(label=Help,command=callback)
      helpmenu.add_command(label=About...,command=callback)
      
      root,mainloop( )
      View Code
  • 工具栏
    • ToolBar
    • 技术分享
      #coding=gbk
      from  tkinter import *
      
      root=Tk()
      def callback():
          print(clicked tool bar button)
      
      #实现工具条   用Frame实现ToolBar
      toolbar=Frame(root)
      b=Button(toolbar,text=New,width=6,command=callback)
      b.pack(side=LEFT,padx=2,pady=2)#side  放置的位置      padx   间距
      
      c=Button(toolbar,text=Open,width=6,command=callback)
      c.pack(side=LEFT,padx=2,pady=2)
      
      toolbar.pack(side=TOP,fill=X)
      root.mainloop()
      View Code
  • MessageBox
    • python中导入tkmessageBox需要这样导入     import tkinter.messagebox
    • 技术分享
      #coding=gbk
      from  tkinter import *
      import tkinter.messagebox
      root =Tk()
      def callback():
          if tkinter.messagebox.askyesno(fuzhiqiang, hi fuzhiqiang):  #弹出消息提醒的窗体,做消息判断的时候很有用
              print(clicked yes)
          else:
              print(clicked no)
              
      button=Button(root,text=Button1,command=callback)
      button.pack()
      root.mainloop()
      View Code
  • 状态栏--StatusBar
    • 技术分享
      #coding=gbk
      from  tkinter import *
      
      root =Tk()
      status=Label(root,text=line20,bd=1,relief=SUNKEN,anchor=W)#anchor   对齐方式  W  西边左对齐
      status.pack(side=BOTTOM,fill=X)
      root.mainloop()
          
      View Code
  • 学习完桌面编程之后,决定自己写一个简单的记事本来练练手,熟悉熟悉学的东西,深入理解一下。
  • 项目简要分析
    •  界面实现:menu,statusbar,text,toolbar,thinter.messagebox,tkFileDialog
    • 功能实现:text相关操作,文件读写操作
  • 菜单的实现
  • 技术分享
    #coding=gbk
    
    from tkinter import *
    
    root=Tk()
    root.title(Fuzhiqiang Node)
    root.geometry(500x500+100+100) #构建一个矩形窗体    初始化的显示位置  100  100
    
    #创建一个menu
    menubar=Menu(root)
    root.config(menu=menubar)
    #创建一系列的子menu
    filemenu=Menu(menubar)
    filemenu.add_command(label=新建,accelerator=Ctrl + N)#accelerator 快捷键,  new  点击事件函数
    filemenu.add_command(label=打开,accelerator=Ctrl + O)
    filemenu.add_command(label=保存,accelerator=Ctrl + S)
    filemenu.add_command(label=另存为,accelerator=Ctrl + Shift + S)
    menubar.add_cascade(label=文件,menu=filemenu)
    
    editmenu=Menu(menubar)
    editmenu.add_command(label=撤销,accelerator=Ctrl + Z)
    editmenu.add_command(label=重做,accelerator=Ctrl + Y)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=剪切,accelerator=Ctrl + X)
    editmenu.add_command(label=复制,accelerator=Ctrl + C)
    editmenu.add_command(label=粘贴,accelerator=Ctrl + V)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=查找,accelerator=Ctrl + F)
    editmenu.add_command(label=全选,accelerator=Ctrl + A)
    menubar.add_cascade(label=编辑,menu=editmenu)
    
    aboutmenu=Menu(menubar)
    aboutmenu.add_command(label=作者)
    aboutmenu.add_command(label=版权)
    menubar.add_cascade(label=关于,menu=aboutmenu)
    root.mainloop()
    View Code

     实现toolbar

  • 技术分享
    #coding=gbk
    
    from tkinter import *
    
    root=Tk()
    root.title(Fuzhiqiang Node)
    root.geometry(500x500+100+100) #构建一个矩形窗体    初始化的显示位置  100  100
    
    #创建一个menu
    menubar=Menu(root)
    root.config(menu=menubar)
    #创建一系列的子menu
    filemenu=Menu(menubar)
    filemenu.add_command(label=新建,accelerator=Ctrl + N)#accelerator 快捷键,  new  点击事件函数
    filemenu.add_command(label=打开,accelerator=Ctrl + O)
    filemenu.add_command(label=保存,accelerator=Ctrl + S)
    filemenu.add_command(label=另存为,accelerator=Ctrl + Shift + S)
    menubar.add_cascade(label=文件,menu=filemenu)
    
    editmenu=Menu(menubar)
    editmenu.add_command(label=撤销,accelerator=Ctrl + Z)
    editmenu.add_command(label=重做,accelerator=Ctrl + Y)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=剪切,accelerator=Ctrl + X)
    editmenu.add_command(label=复制,accelerator=Ctrl + C)
    editmenu.add_command(label=粘贴,accelerator=Ctrl + V)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=查找,accelerator=Ctrl + F)
    editmenu.add_command(label=全选,accelerator=Ctrl + A)
    menubar.add_cascade(label=编辑,menu=editmenu)
    
    aboutmenu=Menu(menubar)
    aboutmenu.add_command(label=作者)
    aboutmenu.add_command(label=版权)
    menubar.add_cascade(label=关于,menu=aboutmenu)
    
    #实现toolbar
    toolbar=Frame(root,height=25,bg=light sea green)
    shortButton=Button(toolbar,text=打开)
    shortButton.pack(side=LEFT,padx=5,pady=5)
    
    shortButton=Button(toolbar,text=保存)
    shortButton.pack(side=LEFT)
    toolbar.pack(expand=NO,fill=X)#全部填充海蓝色
    
    
    root.mainloop()
    View Code
  • 显示状态栏
  • 技术分享
    #coding=gbk
    
    from tkinter import *
    
    root=Tk()
    root.title(Fuzhiqiang Node)
    root.geometry(500x500+100+100) #构建一个矩形窗体    初始化的显示位置  100  100
    
    #创建一个menu
    menubar=Menu(root)
    root.config(menu=menubar)
    #创建一系列的子menu
    filemenu=Menu(menubar)
    filemenu.add_command(label=新建,accelerator=Ctrl + N)#accelerator 快捷键,  new  点击事件函数
    filemenu.add_command(label=打开,accelerator=Ctrl + O)
    filemenu.add_command(label=保存,accelerator=Ctrl + S)
    filemenu.add_command(label=另存为,accelerator=Ctrl + Shift + S)
    menubar.add_cascade(label=文件,menu=filemenu)
    
    editmenu=Menu(menubar)
    editmenu.add_command(label=撤销,accelerator=Ctrl + Z)
    editmenu.add_command(label=重做,accelerator=Ctrl + Y)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=剪切,accelerator=Ctrl + X)
    editmenu.add_command(label=复制,accelerator=Ctrl + C)
    editmenu.add_command(label=粘贴,accelerator=Ctrl + V)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=查找,accelerator=Ctrl + F)
    editmenu.add_command(label=全选,accelerator=Ctrl + A)
    menubar.add_cascade(label=编辑,menu=editmenu)
    
    aboutmenu=Menu(menubar)
    aboutmenu.add_command(label=作者)
    aboutmenu.add_command(label=版权)
    menubar.add_cascade(label=关于,menu=aboutmenu)
    
    #实现toolbar
    toolbar=Frame(root,height=25,bg=light sea green)
    shortButton=Button(toolbar,text=打开)
    shortButton.pack(side=LEFT,padx=5,pady=5)
    
    shortButton=Button(toolbar,text=保存)
    shortButton.pack(side=LEFT)
    toolbar.pack(expand=NO,fill=X)#全部填充海蓝色,显示toolbar栏
    
    #status bar
    status=Label(root,text=Ln20,relief=SUNKEN,anchor=W)#对齐方式  W  左对齐
    status.pack(side=BOTTOM,fill=X) #显示status状态栏
    
    root.mainloop()
    View Code
  • 正文编辑区域Text和Scrollbar
  • 技术分享
    #coding=gbk
    
    from tkinter import *
    
    root=Tk()
    root.title(Fuzhiqiang Node)
    root.geometry(800x500+100+100) #构建一个矩形窗体    初始化的显示位置    100  100  大小  800x500
    
    #创建一个menu
    menubar=Menu(root)
    root.config(menu=menubar)
    #创建一系列的子menu
    filemenu=Menu(menubar)
    filemenu.add_command(label=新建,accelerator=Ctrl + N)#accelerator 快捷键,  new  点击事件函数
    filemenu.add_command(label=打开,accelerator=Ctrl + O)
    filemenu.add_command(label=保存,accelerator=Ctrl + S)
    filemenu.add_command(label=另存为,accelerator=Ctrl + Shift + S)
    menubar.add_cascade(label=文件,menu=filemenu)
    
    editmenu=Menu(menubar)
    editmenu.add_command(label=撤销,accelerator=Ctrl + Z)
    editmenu.add_command(label=重做,accelerator=Ctrl + Y)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=剪切,accelerator=Ctrl + X)
    editmenu.add_command(label=复制,accelerator=Ctrl + C)
    editmenu.add_command(label=粘贴,accelerator=Ctrl + V)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=查找,accelerator=Ctrl + F)
    editmenu.add_command(label=全选,accelerator=Ctrl + A)
    menubar.add_cascade(label=编辑,menu=editmenu)
    
    aboutmenu=Menu(menubar)
    aboutmenu.add_command(label=作者)
    aboutmenu.add_command(label=版权)
    menubar.add_cascade(label=关于,menu=aboutmenu)
    
    #实现toolbar
    toolbar=Frame(root,height=25,bg=light sea green)
    shortButton=Button(toolbar,text=打开)
    shortButton.pack(side=LEFT,padx=5,pady=5)
    
    shortButton=Button(toolbar,text=保存)
    shortButton.pack(side=LEFT)
    toolbar.pack(expand=NO,fill=X)#全部填充海蓝色,显示toolbar栏
    
    #status bar
    status=Label(root,text=Ln20,relief=SUNKEN,anchor=W)#对齐方式  W  左对齐
    status.pack(side=BOTTOM,fill=X) #显示status状态栏
    
    #linenumber&text
    lnlabel=Label(root,width=2,bg=antique white)
    lnlabel.pack(side=LEFT,fill=Y)#将Y轴填充满
    
    textPad=Text(root,undo=True)
    textPad.pack(expand=YES, fill=BOTH)#允许进行扩展 ,填充X,Y轴
    
    scroll=Scrollbar(textPad)#右侧的移动下滑栏
    textPad.config(yscrollcommand=scroll.set)#在Y轴显示   yscrollcommand
    scroll.config(command=textPad.yview)#这是为了让编辑内容和下拉栏同时移动
    scroll.pack(side=RIGHT,fill=Y)#显示
    
    
    root.mainloop()
    View Code
  • 关于about信息的实现
  • 技术分享
    #coding=gbk
    
    from tkinter import *
    from tkinter.messagebox import *  #这是弹出窗口
    
    
    def author():#将函数与about进行了绑定
        showinfo(作者信息, 本软件由付志强完成!)
    def about(): 
        showinfo(版权信息。copyright, 本软件归属于付志强)
        
    
    root=Tk()
    root.title(Fuzhiqiang Node)
    root.geometry(800x500+100+100) #构建一个矩形窗体    初始化的显示位置    100  100  大小  800x500
    
    #创建一个menu
    menubar=Menu(root)
    root.config(menu=menubar)
    #创建一系列的子menu
    filemenu=Menu(menubar)
    filemenu.add_command(label=新建,accelerator=Ctrl + N)#accelerator 快捷键,  new  点击事件函数
    filemenu.add_command(label=打开,accelerator=Ctrl + O)
    filemenu.add_command(label=保存,accelerator=Ctrl + S)
    filemenu.add_command(label=另存为,accelerator=Ctrl + Shift + S)
    menubar.add_cascade(label=文件,menu=filemenu)
    
    #编辑菜单
    editmenu=Menu(menubar)
    editmenu.add_command(label=撤销,accelerator=Ctrl + Z)
    editmenu.add_command(label=重做,accelerator=Ctrl + Y)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=剪切,accelerator=Ctrl + X)
    editmenu.add_command(label=复制,accelerator=Ctrl + C)
    editmenu.add_command(label=粘贴,accelerator=Ctrl + V)
    editmenu.add_separator()#分隔符
    editmenu.add_command(label=查找,accelerator=Ctrl + F)
    editmenu.add_command(label=全选,accelerator=Ctrl + A)
    menubar.add_cascade(label=编辑,menu=editmenu)
    
    #about菜单
    aboutmenu=Menu(menubar)
    aboutmenu.add_command(label=作者,command=author)#command  对应的函数定义在前面
    aboutmenu.add_command(label=版权,command=about)
    menubar.add_cascade(label=关于,menu=aboutmenu)
    
    #实现toolbar
    toolbar=Frame(root,height=25,bg=light sea green)
    shortButton=Button(toolbar,text=打开)
    shortButton.pack(side=LEFT,padx=5,pady=5)
    
    shortButton=Button(toolbar,text=保存)
    shortButton.pack(side=LEFT)
    toolbar.pack(expand=NO,fill=X)#全部填充海蓝色,显示toolbar栏
    
    #status bar
    status=Label(root,text=Ln20,relief=SUNKEN,anchor=W)#对齐方式  W  左对齐
    status.pack(side=BOTTOM,fill=X) #显示status状态栏
    
    #linenumber&text
    lnlabel=Label(root,width=2,bg=antique white)
    lnlabel.pack(side=LEFT,fill=Y)#将Y轴填充满
    
    textPad=Text(root,undo=True)
    textPad.pack(expand=YES, fill=BOTH)#允许进行扩展 ,填充X,Y轴
    
    scroll=Scrollbar(textPad)#右侧的移动下滑栏
    textPad.config(yscrollcommand=scroll.set)#在Y轴显示   yscrollcommand
    scroll.config(command=textPad.yview)#这是为了让编辑内容和下拉栏同时移动
    scroll.pack(side=RIGHT,fill=Y)#显示
    
    #about信息实现
    
    root.mainloop()
    View Code
  • 文件操作
    • 新的库的学习:File Dialogs   地址:effbot.org/tkinterbook/tkinter-file-dialogs.htm
    • askopenfilename和asksaveasfilename:打开和保存操作。
    • 技术分享
      #coding=gbk
      
      from tkinter import *
      from tkinter.messagebox import *  #这是弹出窗口
      from tkinter.filedialog import *
      import os
      from email.policy import default
      from setuptools.sandbox import save_argv
      filename=‘‘
      
      #about实现
      def author():#将函数与about进行了绑定
          showinfo(作者信息, 本软件由付志强完成!)
      def about(): 
          showinfo(版权信息。copyright, 本软件归属于付志强)
          
      
      def openfile():#打开文件函数           文件名应该是全局变量,因为还可能需要保存
          global filename#使用全局变量
          filename=askopenfilename(defaultextension=.txt)#提供一个打开的方式   默认的扩展名.txt
          if filename==‘‘: #如果打开的文件是空的,设置为空
              filename=None
          else:#如果不为空,就加载到title上
              root.title(FileName:+os.path.basename(filename))#找到实际路径
              #如果打开的手编辑器里面有正在编写的内容,就要清空原来的内容
              textPad.delete(1.0, END)#删除从头到尾   第一行的第0列
              f=open(filename,r)#打开文件
              textPad.insert(1.0,f.read())#插入内容,从1.0处插入
              f.close()#关闭文件
              
              
      def newfile():
          global filename
          root.title(未命名文件)
          filename=None
          textPad.delete(1.0,END)
          
      #保存和另存为
      #保存时保存在到一个默认的地址
      #另存是需要弹出一个对话框去存储你要存取的地址
      def save():#封装保存
          global filename
          #如果文件存在的话就是直接保存在默认的路径
          #如果不存在的话就是另存为一个新的文件
          try:
              f=open(filename,w)
              msg=textPad.get(1.0,END)
              f.write(msg)
              f.close()
          except:
              saves()
      def saves():#文件的另存为保存
          f=asksaveasfilename(initialfile=未命名.txt,defaultextension=.txt)#初始化文件名和后缀名
          global filename
          filename =f
          fh=open(f,w)#打开文件写文件
          msg=textPad.get(1.0,END)#写入的内容得到
          fh.write(msg)#写入内容到文件
          fh.close()
          root.title(Filename:+os.path.basename(f))#存储文件
          
      
      root=Tk()
      root.title(Fuzhiqiang Node)
      root.geometry(800x500+100+100) #构建一个矩形窗体    初始化的显示位置    100  100  大小  800x500
      
      #创建一个menu
      menubar=Menu(root)
      root.config(menu=menubar)
      #创建一系列的子menu
      filemenu=Menu(menubar)
      filemenu.add_command(label=新建,accelerator=Ctrl + N,command=newfile)#accelerator 快捷键,  new  点击事件函数
      filemenu.add_command(label=打开,accelerator=Ctrl + O,command=openfile)
      filemenu.add_command(label=保存,accelerator=Ctrl + S,command=save)
      filemenu.add_command(label=另存为,accelerator=Ctrl + Shift + S,command=saves)
      menubar.add_cascade(label=文件,menu=filemenu)
      
      #编辑菜单
      editmenu=Menu(menubar)
      editmenu.add_command(label=撤销,accelerator=Ctrl + Z)
      editmenu.add_command(label=重做,accelerator=Ctrl + Y)
      editmenu.add_separator()#分隔符
      editmenu.add_command(label=剪切,accelerator=Ctrl + X)
      editmenu.add_command(label=复制,accelerator=Ctrl + C)
      editmenu.add_command(label=粘贴,accelerator=Ctrl + V)
      editmenu.add_separator()#分隔符
      editmenu.add_command(label=查找,accelerator=Ctrl + F)
      editmenu.add_command(label=全选,accelerator=Ctrl + A)
      menubar.add_cascade(label=编辑,menu=editmenu)
      
      #about菜单
      aboutmenu=Menu(menubar)
      aboutmenu.add_command(label=作者,command=author)#command  对应的函数定义在前面
      aboutmenu.add_command(label=版权,command=about)
      menubar.add_cascade(label=关于,menu=aboutmenu)
      
      #实现toolbar
      toolbar=Frame(root,height=25,bg=light sea green)
      shortButton=Button(toolbar,text=打开,command=openfile)
      shortButton.pack(side=LEFT,padx=5,pady=5)
      
      shortButton=Button(toolbar,text=保存,command=save)
      shortButton.pack(side=LEFT)
      toolbar.pack(expand=NO,fill=X)#全部填充海蓝色,显示toolbar栏
      
      #status bar
      status=Label(root,text=Ln20,relief=SUNKEN,anchor=W)#对齐方式  W  左对齐
      status.pack(side=BOTTOM,fill=X) #显示status状态栏
      
      #linenumber&text
      lnlabel=Label(root,width=2,bg=antique white)
      lnlabel.pack(side=LEFT,fill=Y)#将Y轴填充满
      
      textPad=Text(root,undo=True)
      textPad.pack(expand=YES, fill=BOTH)#允许进行扩展 ,填充X,Y轴
      
      scroll=Scrollbar(textPad)#右侧的移动下滑栏
      textPad.config(yscrollcommand=scroll.set)#在Y轴显示   yscrollcommand
      scroll.config(command=textPad.yview)#这是为了让编辑内容和下拉栏同时移动
      scroll.pack(side=RIGHT,fill=Y)#显示
      
      #about信息实现
      
      root.mainloop()
      View Code
  • 复制粘贴操作
    • 存在于event generate,存在于Tk库中 ,源码地址:http://www.tcl.tk/man/tcl8.5/TkCmd/event.htm
    • 技术分享
      #coding=gbk
      
      from tkinter import *
      from tkinter.messagebox import *  #这是弹出窗口
      from tkinter.filedialog import *
      import os
      from email.policy import default
      from setuptools.sandbox import save_argv
      from asyncio.protocols import Protocol
      filename=‘‘
      
      #about实现
      def author():#将函数与about进行了绑定
          showinfo(作者信息, 本软件由付志强完成!)
      def about(): 
          showinfo(版权信息。copyright, 本软件归属于付志强)
          
      
      def openfile():#打开文件函数           文件名应该是全局变量,因为还可能需要保存
          global filename#使用全局变量
          filename=askopenfilename(defaultextension=.txt)#提供一个打开的方式   默认的扩展名.txt
          if filename==‘‘: #如果打开的文件是空的,设置为空
              filename=None
          else:#如果不为空,就加载到title上
              root.title(FileName:+os.path.basename(filename))#找到实际路径
              #如果打开的手编辑器里面有正在编写的内容,就要清空原来的内容
              textPad.delete(1.0, END)#删除从头到尾   第一行的第0列
              f=open(filename,r)#打开文件
              textPad.insert(1.0,f.read())#插入内容,从1.0处插入
              f.close()#关闭文件
              
              
      def newfile():
          global filename
          root.title(未命名文件)
          filename=None
          textPad.delete(1.0,END)
          
      #保存和另存为
      #保存时保存在到一个默认的地址
      #另存是需要弹出一个对话框去存储你要存取的地址
      def save():#封装保存
          global filename
          #如果文件存在的话就是直接保存在默认的路径
          #如果不存在的话就是另存为一个新的文件
          try:
              f=open(filename,w)
              msg=textPad.get(1.0,END)
              f.write(msg)
              f.close()
          except:
              saves()
      def saves():#文件的另存为保存
          f=asksaveasfilename(initialfile=未命名.txt,defaultextension=.txt)#初始化文件名和后缀名
          global filename
          filename =f
          fh=open(f,w)#打开文件写文件
          msg=textPad.get(1.0,END)#写入的内容得到
          fh.write(msg)#写入内容到文件
          fh.close()
          root.title(Filename:+os.path.basename(f))#存储文件
          
      # bind()
      # Protocol
      # event generate
      
      #复制粘贴撤销重做
      def cut():
          textPad.event_generate(<<Cut>>)
          
      def copy():
          textPad.event_generate(<<Copy>>)
          
      def paste():
          textPad.event_generate(<<Paste>>)
          
      def redo():
          textPad.event_generate(<<Redo>>)
          
      def undo():
          textPad.event_generate(<<Undo>>)
      
      root=Tk()
      root.title(Fuzhiqiang Node)
      root.geometry(800x500+100+100) #构建一个矩形窗体    初始化的显示位置    100  100  大小  800x500
      
      #创建一个menu
      menubar=Menu(root)
      root.config(menu=menubar)
      #创建一系列的子menu
      filemenu=Menu(menubar)
      filemenu.add_command(label=新建,accelerator=Ctrl + N,command=newfile)#accelerator 快捷键,  new  点击事件函数
      filemenu.add_command(label=打开,accelerator=Ctrl + O,command=openfile)
      filemenu.add_command(label=保存,accelerator=Ctrl + S,command=save)
      filemenu.add_command(label=另存为,accelerator=Ctrl + Shift + S,command=saves)
      menubar.add_cascade(label=文件,menu=filemenu)
      
      #编辑菜单
      editmenu=Menu(menubar)
      editmenu.add_command(label=撤销,accelerator=Ctrl + Z,command=undo)
      editmenu.add_command(label=重做,accelerator=Ctrl + Y,command=redo)
      editmenu.add_separator()#分隔符
      editmenu.add_command(label=剪切,accelerator=Ctrl + X,command=cut)
      editmenu.add_command(label=复制,accelerator=Ctrl + C,command=copy)
      editmenu.add_command(label=粘贴,accelerator=Ctrl + V,command=paste)
      editmenu.add_separator()#分隔符
      editmenu.add_command(label=查找,accelerator=Ctrl + F)
      editmenu.add_command(label=全选,accelerator=Ctrl + A)
      menubar.add_cascade(label=编辑,menu=editmenu)
      
      #about菜单
      aboutmenu=Menu(menubar)
      aboutmenu.add_command(label=作者,command=author)#command  对应的函数定义在前面
      aboutmenu.add_command(label=版权,command=about)
      menubar.add_cascade(label=关于,menu=aboutmenu)
      
      #实现toolbar
      toolbar=Frame(root,height=25,bg=light sea green)
      shortButton=Button(toolbar,text=打开,command=openfile)
      shortButton.pack(side=LEFT,padx=5,pady=5)
      
      shortButton=Button(toolbar,text=保存,command=save)
      shortButton.pack(side=LEFT)
      toolbar.pack(expand=NO,fill=X)#全部填充海蓝色,显示toolbar栏
      
      #status bar
      status=Label(root,text=Ln20,relief=SUNKEN,anchor=W)#对齐方式  W  左对齐
      status.pack(side=BOTTOM,fill=X) #显示status状态栏
      
      #linenumber&text
      lnlabel=Label(root,width=2,bg=antique white)
      lnlabel.pack(side=LEFT,fill=Y)#将Y轴填充满
      
      textPad=Text(root,undo=True)
      textPad.pack(expand=YES, fill=BOTH)#允许进行扩展 ,填充X,Y轴
      
      scroll=Scrollbar(textPad)#右侧的移动下滑栏
      textPad.config(yscrollcommand=scroll.set)#在Y轴显示   yscrollcommand
      scroll.config(command=textPad.yview)#这是为了让编辑内容和下拉栏同时移动
      scroll.pack(side=RIGHT,fill=Y)#显示
      
      #about信息实现
      
      root.mainloop()
      View Code
  • 全选和查找
    • 技术分享
      #coding=gbk
      
      from tkinter import *
      from tkinter.messagebox import *  #这是弹出窗口
      from tkinter.filedialog import *
      import os
      from email.policy import default
      from setuptools.sandbox import save_argv
      from asyncio.protocols import Protocol
      filename=‘‘
      
      #about实现
      def author():#将函数与about进行了绑定
          showinfo(作者信息, 本软件由付志强完成!)
      def about(): 
          showinfo(版权信息。copyright, 本软件归属于付志强)
          
      
      def openfile():#打开文件函数           文件名应该是全局变量,因为还可能需要保存
          global filename#使用全局变量
          filename=askopenfilename(defaultextension=.txt)#提供一个打开的方式   默认的扩展名.txt
          if filename==‘‘: #如果打开的文件是空的,设置为空
              filename=None
          else:#如果不为空,就加载到title上
              root.title(FileName:+os.path.basename(filename))#找到实际路径
              #如果打开的手编辑器里面有正在编写的内容,就要清空原来的内容
              textPad.delete(1.0, END)#删除从头到尾   第一行的第0列
              f=open(filename,r)#打开文件
              textPad.insert(1.0,f.read())#插入内容,从1.0处插入
              f.close()#关闭文件
              
              
      def newfile():
          global filename
          root.title(未命名文件)
          filename=None
          textPad.delete(1.0,END)
          
      #保存和另存为
      #保存时保存在到一个默认的地址
      #另存是需要弹出一个对话框去存储你要存取的地址
      def save():#封装保存
          global filename
          #如果文件存在的话就是直接保存在默认的路径
          #如果不存在的话就是另存为一个新的文件
          try:
              f=open(filename,w)
              msg=textPad.get(1.0,END)
              f.write(msg)
              f.close()
          except:
              saves()
      def saves():#文件的另存为保存
          f=asksaveasfilename(initialfile=未命名.txt,defaultextension=.txt)#初始化文件名和后缀名
          global filename
          filename =f
          fh=open(f,w)#打开文件写文件
          msg=textPad.get(1.0,END)#写入的内容得到
          fh.write(msg)#写入内容到文件
          fh.close()
          root.title(Filename:+os.path.basename(f))#存储文件
          
      # bind()
      # Protocol
      # event generate
      
      #复制粘贴撤销重做
      def cut():
          textPad.event_generate(<<Cut>>)
          
      def copy():
          textPad.event_generate(<<Copy>>)
          
      def paste():
          textPad.event_generate(<<Paste>>)
          
      def redo():
          textPad.event_generate(<<Redo>>)
          
      def undo():
          textPad.event_generate(<<Undo>>)
          
      #查找和全选
      #全选
      def selectAll():
          textPad.tag_add(sel, 1.0,END)
          
      #查找
      #这里要用到自定义窗体,弹出窗体toplevel,查看前面代码
      def search():
          #创建弹出窗口进行查找
          topsearch=Toplevel(root)
          topsearch.geometry(800x300+200+250)
          label1=Label(topsearch,text=Find)
          label1.grid(row=0,column=0,padx=5)  #显示
          entry1=Entry(topsearch,width=20)
          entry1.grid(row=0,column=1,padx=5)
          button1=Button(topsearch,text=查找)
          button1.grid(row=0,column=2)
          
          #匹配输入的值并且在里面查询
      
      
      root=Tk()
      root.title(Fuzhiqiang Node)
      root.geometry(800x500+100+100) #构建一个矩形窗体    初始化的显示位置    100  100  大小  800x500
      
      #创建一个menu
      menubar=Menu(root)
      root.config(menu=menubar)
      #创建一系列的子menu
      filemenu=Menu(menubar)
      filemenu.add_command(label=新建,accelerator=Ctrl + N,command=newfile)#accelerator 快捷键,  new  点击事件函数
      filemenu.add_command(label=打开,accelerator=Ctrl + O,command=openfile)
      filemenu.add_command(label=保存,accelerator=Ctrl + S,command=save)
      filemenu.add_command(label=另存为,accelerator=Ctrl + Shift + S,command=saves)
      menubar.add_cascade(label=文件,menu=filemenu)
      
      #编辑菜单
      editmenu=Menu(menubar)
      editmenu.add_command(label=撤销,accelerator=Ctrl + Z,command=undo)
      editmenu.add_command(label=重做,accelerator=Ctrl + Y,command=redo)
      editmenu.add_separator()#分隔符
      editmenu.add_command(label=剪切,accelerator=Ctrl + X,command=cut)
      editmenu.add_command(label=复制,accelerator=Ctrl + C,command=copy)
      editmenu.add_command(label=粘贴,accelerator=Ctrl + V,command=paste)
      editmenu.add_separator()#分隔符
      editmenu.add_command(label=查找,accelerator=Ctrl + F,command=search)
      editmenu.add_command(label=全选,accelerator=Ctrl + A,command=selectAll)
      menubar.add_cascade(label=编辑,menu=editmenu)
      
      #about菜单
      aboutmenu=Menu(menubar)
      aboutmenu.add_command(label=作者,command=author)#command  对应的函数定义在前面
      aboutmenu.add_command(label=版权,command=about)
      menubar.add_cascade(label=关于,menu=aboutmenu)
      
      #实现toolbar
      toolbar=Frame(root,height=25,bg=light sea green)
      shortButton=Button(toolbar,text=打开,command=openfile)
      shortButton.pack(side=LEFT,padx=5,pady=5)
      
      shortButton=Button(toolbar,text=保存,command=save)
      shortButton.pack(side=LEFT)
      toolbar.pack(expand=NO,fill=X)#全部填充海蓝色,显示toolbar栏
      
      #status bar
      status=Label(root,text=Ln20,relief=SUNKEN,anchor=W)#对齐方式  W  左对齐
      status.pack(side=BOTTOM,fill=X) #显示status状态栏
      
      #linenumber&text
      lnlabel=Label(root,width=2,bg=antique white)
      lnlabel.pack(side=LEFT,fill=Y)#将Y轴填充满
      
      textPad=Text(root,undo=True)
      textPad.pack(expand=YES, fill=BOTH)#允许进行扩展 ,填充X,Y轴
      
      scroll=Scrollbar(textPad)#右侧的移动下滑栏
      textPad.config(yscrollcommand=scroll.set)#在Y轴显示   yscrollcommand
      scroll.config(command=textPad.yview)#这是为了让编辑内容和下拉栏同时移动
      scroll.pack(side=RIGHT,fill=Y)#显示
      
      #about信息实现
      
      root.mainloop()
      View Code
  • 终于写完了,凑合着玩玩,喜欢的可以自己玩玩。

python--tkinter桌面编程开发--记事本

标签:

原文地址:http://www.cnblogs.com/Kobe10/p/5712233.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!