会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132837个问题

老师,为什么我找着视频中的源码敲了一遍然后,保存所写的文本时总是报错。。





"""开发记事本软件的菜单

"""

coding=utf-8


from tkinter.filedialog import *

from tkinter.colorchooser import *

from tkinter import *




class Application(Frame):


    def __init__(selfmaster=None):

        super().__init__(master)        # super()代表的是父类的定义,而不是父类对象

        self.master = master

        self.textpad = None             # textpad表示Text文本框对象

        self.pack()

        self.createWidget()


    def createWidget(self):

        # 创建主菜单栏

        menubar = Menu(root)


        # 创建子菜单

        menuFile = Menu(menubar)

        menuEdit = Menu(menubar)

        menuHelp = Menu(menubar)


        # 将子菜单加入到主菜单栏

        menubar.add_cascade(label="文件(F)"menu=menuFile)

        menubar.add_cascade(label="编辑(E)"menu=menuEdit)

        menubar.add_cascade(label="帮助(H)"menu=menuHelp)


        # 添加菜单项

        menuFile.add_command(label="新建"accelerator="ctrl+n"command=self.newfile)

        menuFile.add_command(label="打开"accelerator="ctrl+o"command=self.openfile)

        menuFile.add_command(label="保存"accelerator="ctrl+s",command=self.savefile)

        menuFile.add_separator()  # 添加分割线

        menuFile.add_command(label="退出"accelerator="ctrl+q",command=self.exit)


        # 将主菜单栏加到根窗口

        root["menu"] = menubar


        # 增加快捷键的处理

        root.bind("<Control-n>",lambda event:self.newfile())

        root.bind("<Control-o>",lambda event:self.openfile())

        root.bind("<Control-s>",lambda event:self.savefile())

        root.bind("<Control-q>",lambda event:self.exit())


        #文本编辑区

        self.textpad = Text(root, width=50, height=30)

        self.textpad.pack()


        # 创建上下菜单

        self.contextMenu = Menu(root)

        self.contextMenu.add_command(label="背景颜色"command=self.openAskColor)


        #为右键绑定事件

        root.bind("<Button-3>",self.createContextMenu)


    def newfile(self):

        self.textpad.delete("1.0""end")  # 把text控件中所有的内容清空

        self.filename= asksaveasfilename(title="另存为",initialfile="未命名.txt",

                          filetypes=[("文本文档","*.txt")],

                          defaultextension=".txt")

        self.savefile()


    def openfile(self):

        self.textpad.delete("1.0","end")        # 把text控件中所有的内容清空

        with askopenfile(title="打开文本文件"as f:

            self.textpad.insert(INSERT,f.read())

            self.filename = f.name


    def savefile(self):

        with open(self.filename,"w"as f:

            c = self.textpad.get(1.0,END)

            f.write(c)


    def exit(self):

        root.quit()


    def openAskColor(self):

        s1 = askcolor(color="red",title="选择背景色")

        self.textpad.config(bg=s1[1])

    def createContextMenu(self,event):

        # 菜单在鼠标右键单击的坐标处显示

        self.contextMenu.post(event.x_root, event.y_root)



if __name__ == '__main__':

    root = Tk()

    root.geometry("450x300+200+300")

    root.title("百战程序员的简易记事本")

    app = Application(master=root)

    root.mainloop()

截图如下:

屏幕截图 2021-04-11 173723.png

Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 3676楼
JAVA 全系列/第十一阶段:消息中间件与高并发处理/Nginx 3678楼
JAVA 全系列/第一阶段:JAVA 快速入门/变量、数据类型、运算符 3680楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask高级 3681楼
Python 全系列/第二阶段:Python 深入与提高/模块 3682楼
Python 全系列/第四阶段:函数式编程和核心特性/函数式编程 3683楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/函数式编程 3686楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 3687楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器 3688楼
JAVA 全系列/第一阶段:JAVA 快速入门/变量、数据类型、运算符 3689楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637