第二部分 Python提高—GUI图形用户界面编程(八)

实战项目 编制简易笔记本
要求:

#开发记事本功能
'''开发一个简单的记事本。
包含:新建、保存、修改文本内容、退出
包含:各种快捷键的处理
'''
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 19 07:43:27 2024

@author: Administrator
"""

#开发记事本功能
'''开发一个简单的记事本。
包含:新建、保存、修改文本内容、退出
包含:各种快捷键的处理
'''

from tkinter import *
from tkinter.filedialog import *
from tkinter.colorchooser import *

class Application(Frame):
    
    def __init__(self,master=None):
        super().__init__(master)
        self.master = master
        self.textpad = None
        self.filename = None
        self.contextMenu = None
        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="新建(N)",accelerator="ctrl+n",command=self.newfile)
        menuFile.add_command(label="打开(O)",accelerator="ctrl+o",command=self.openfile)
        menuFile.add_command(label="保存(S)",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-s>",lambda event:self.savefile())
        root.bind("<Control-o>",lambda event:self.openfile())
        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.textpad.delete("1.0",'end')
        self.filename = asksaveasfilename(title='另存为',initialfile="未命名.txt",filetype=["文本文档","*.txt"],defaultextension="*.txt")
        print(self.filename)
        self.savefile()
    def openfile(self):
        self.textpad.delete("1.0","end")
        with askopenfile(title="打开文件") as f:
            self.textpad.insert(INSERT,f.read())
            self.filename = f.name
            print(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("500x500+250+300")
    root.title("简易记事本")
    app = Application(master=root)
    root.mainloop()
        
        
  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44006060

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值