GUI编程:菜单的操作

实现菜单和弹出式菜单的各项功能

import tkinter as tk
import tkinter.scrolledtext as tst
class Application(tk.Frame):
    def __init__(self,master=None):  #构造函数
        tk.Frame.__init__(self,master)
        self.grid()
        self.createWidgets()   #声明对象方法,创建子组件
        self.createMenu()    #声明对象方法,创建菜单
        root["menu"]=self.menubar   #附加主菜单到根窗口
        root.bind("<Button-3>",self.f_popup)  #绑定鼠标右击事件
    def createWidgets(self):
        self.textEdit=tst.ScrolledText(self,width=80,height=20)   #创建text组件
        self.textEdit.grid(row=0,column=0,rowspan=6)
    def createMenu(self):
        self.menubar=tk.Menu(root)    #创建主菜单menubar
        self.menufile=tk.Menu(self.menubar)   #创建菜单menufile
        self.menuedit=tk.Menu(self.menubar,tearoff=0)
        self.menuhelp=tk.Menu(self.menubar,tearoff=0)  #创建菜单menuhelp
        self.menubar.add_cascade(label="File",menu=self.menufile)
        self.menubar.add_cascade(label="Edit",menu=self.menuedit)
        self.menubar.add_cascade(label="Help",menu=self.menuhelp)
        #添加菜单项
        #文件菜单
        self.menufile.add_command(label="New",command=self.f_new)
        self.menufile.add_command(label="Open",command=self.f_open)
        self.menufile.add_command(label="Save",accelerator="^A",command=self.f_save)
        self.menufile.add_separator()   #分隔符
        self.menufile.add_command(label="Exit",command=root.destroy)
        #编辑菜单
        self.menuedit.add_command(label="Cut",command=self.f_cut)
        self.menuedit.add_command(label="Copy",command=self.f_copy)
        self.menuedit.add_command(label="Paste",command=self.f_paste)
        #帮助菜单
        self.menuhelp.add_command(label="About",command=self.f_about)
        
    def f_new(self):   #定义新建文件的菜单命令事件处理函数
        self.textEdit.delete(1.0,tk.END)   #清空text组件内的内容

    def f_open(self):   #定义打开文件的菜单命令事件处理函数
        self.textEdit.delete(1.0,tk.END)   #清空Text组件内容
        fname=tk.filedialog.askopenfilename(filetypes=[("Python源文件",".py")])
        with open(fname,"r",encoding="utf-8") as f1:   #打开文件
            str1=f1.read()   #将文件读入到str1变量中
        self.textEdit.insert(0.0,str1)   #插入内容到text组件中
        
    def f_save(self):
        str1=self.textEdit.get(1.0,tk.END)   #获取text组件内的所有内容
        fname=tk.filedialog.asksaveasfilename(filetypes=[("Python源文件",".py")])
        with open(fname,"w",encoding="utf-8") as f1:  #打开文件
            f1.write(str1)       #将str1中的内容全部写入text组件中

    def f_about(self):
        tk.messagebox.showinfo("关于","版本V 1.0")

    def f_cut(self):
        try:
            str1=self.textEdit.get(tk.SEL_FIRST,tk.SEL_LAST)  #获取选择的内容
            self.textEdit.clipboard_clear()   #清空剪贴板
            self.textEdit.clipboard_append(str1)    #将str1中的内容添加到剪贴板中
            self.textEdit.delete(tk.SEL_FIRST,tk.SEL_LAST)   #删除选择的内容
        except:pass

    def f_copy(self):
        try:
            str1=self.textEdit.get(tk.SEL_FIRST,tk.SEL_LAST)
            self.textEdit.clipboard_clear()
            self.textEdit.clipboard_append(str1)
        except:pass
    def f_paste(self):
        str1=self.textEdit.selection_get(selection="CLIPBOARD")  #获取剪贴板内的内容
        try:
            self.textEdit.replace(tk.SEL_FIRST,tk.SEL_LAST,str1)  #使用剪贴板内容替换所选内容,否则插入剪贴板内容
        except:
            self.textEdit.insert(tk.INSERT,str1)   #将内容插到当前位置

    def f_popup(self,event):   #弹出式菜单事件处理函数
        self.menuedit.post(event.x_root,event.y_root)  #在鼠标右键位置显示菜单

root=tk.Tk()
root.title("简易文本编辑器")
app=Application(master=root)   #创建Application对象实例
app.mainloop()    #事件循环

    

运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值