Python tkinter实现复刻Windows记事本UI和菜单的文本编辑器(一)

下一篇:Python tkinter实现复刻Windows记事本UI和菜单的文本编辑器(二)-CSDN博客

介绍:

Windows操作系统中自带了一款记事本应用程序,通常用于记录文字信息,具有简单文本编辑功能。Windows的记事本可以新建、打开、保存文件,有复制、粘贴、删除等功能,还可以设置字体类型、格式和查看日期时间等。

本篇文章主要实现了与记事本一样的UI界面和菜单,关注我,我将持续完善“文本编辑器”全部功能,敬请耐心等待!

运行结果:

项目代码

"""
    文本编辑器
"""

# 通配符
__all__ = ['main']


# 设置文本域窗口大小
def setTextSize(event, object):
    print(event.width, event.height)
    print(event.width // 10, event.height // 19)
    object.config(width=event.width // 10, height=event.height // 19)


# 主函数
def main():
    import tkinter as tk
    from tkinter import font
    base = tk.Tk()              # 新建一个窗口
    base.title('文本编辑器')     # 窗口标题
    base.geometry(f'750x550+{base.winfo_screenwidth()//4}+{base.winfo_screenheight()//8}')

    # 新建顶级菜单
    topMenu = tk.Menu(base)
    base.config(menu=topMenu)

    # 二级菜单 文件
    fileMenu = tk.Menu(topMenu, tearoff=0)
    fileMenu.add_command(label=f'新建(N){" "*28}Ctrl+N')
    fileMenu.add_command(label=f'新窗口(W){" "*16}Ctrl+Shift+N')
    fileMenu.add_command(label=f'打开(O)...{" "*26}Ctrl+O')
    fileMenu.add_command(label=f'保存(S){" "*29}Ctrl+S')
    fileMenu.add_command(label=f'另存为(A)...{" "*15}Ctrl+Shift+S')
    fileMenu.add_command(label=f'页面设置(U)...')
    fileMenu.add_command(label=f'打印(P)...{" "*27}Ctrl+P')
    fileMenu.add_command(label=f'退出(X)')
    topMenu.add_cascade(label='文件(F)', menu=fileMenu)

    # 二级菜单 编辑
    editMenu = tk.Menu(topMenu, tearoff=0)
    editMenu.add_command(label=f'撤销(U){" "*26}Ctrl+Z')
    editMenu.add_command(label=f'剪切(T){" "*26}Ctrl+X')
    editMenu.add_command(label=f'复制(C){" "*26}Ctrl+C')
    editMenu.add_command(label=f'粘贴(V){" "*26}Ctrl+V')
    editMenu.add_command(label=f'删除(L){" "*27}Delete')
    editMenu.add_command(label=f'使用 Bing 搜索...{" "*14}Ctrl+E')
    editMenu.add_command(label=f'查找(F)...{" "*25}Ctrl+F')
    editMenu.add_command(label=f'查找上一个(N){" "*23}F3')
    editMenu.add_command(label=f'查找下一个(V){" "*15}Shift+F3')
    editMenu.add_command(label=f'替换(R)...{" "*23}Ctrl+H')
    editMenu.add_command(label=f'转到(G)...{" "*23}Ctrl+G')
    editMenu.add_command(label=f'全选(A){" "*26}Ctrl+A')
    editMenu.add_command(label=f'时间/日期(D){" "*25}F5')
    topMenu.add_cascade(label='编辑(E)', menu=editMenu)

    # 二级菜单 格式
    integer1 = tk.IntVar()
    formatMenu = tk.Menu(topMenu, tearoff=0)
    formatMenu.add_checkbutton(label='自动换行(W)', variable=integer1, onvalue=0, offvalue=1)
    formatMenu.add_command(label='字体(F)...')
    topMenu.add_cascade(label='格式(O)', menu=formatMenu)

    # 二级菜单 查看
    integer2 = tk.IntVar()
    checkMenu = tk.Menu(topMenu, tearoff=0)
    checkMenu.add_command(label='缩放(Z)')
    checkMenu.add_checkbutton(label='状态栏(S)', variable=integer2, onvalue=0, offvalue=1)
    topMenu.add_cascade(label='查看(V)', menu=checkMenu)

    # 二级菜单 帮助
    helpMenu = tk.Menu(topMenu, tearoff=0)
    helpMenu.add_command(label='查看帮助(H)')
    helpMenu.add_command(label='发送反馈(F)')
    helpMenu.add_command(label='关于文本编辑器(A)')
    topMenu.add_cascade(label='帮助(H)', menu=helpMenu)

    # 文本编辑区域
    setFont = font.Font(family='Tahoma', size=12, weight='bold')
    textData = tk.Text(base, wrap=tk.WORD, font=setFont)
    textData.grid()
    # 初始化设置
    # textData.config(width=106, height=42, background='red', font=setFont)
    # textData.config(width=75, height=29, background='red', font=setFont)

    # 绑定调整文本域大小到窗口大小变化事件
    base.bind("<Configure>", lambda event: setTextSize(event, textData))

    base.mainloop()             # 窗口主循环


# 代码测试
if __name__ == '__main__':
    main()
else:
    print(f'导入{__name__}模块')

作者:周华

创作日期:2023/11/8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/124085.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go和JavaScript结合使用:抓取网页中的图像链接

前言 在当今数字化时代&#xff0c;数据是金钱的源泉&#xff0c;对于许多项目和应用程序来说&#xff0c;获取并利用互联网上的数据是至关重要的。其中之一的需求场景是从网页中抓取图片链接&#xff0c;这在各种项目中都有广泛应用&#xff0c;特别是在动漫类图片收集项目中…

漏刻有时百度地图API实战开发(6)多个标注覆盖层级导致不能响应点击的问题

漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的解…

【MATLAB源码-第70期】基于matlab的萤火虫算法(FA)的栅格路径规划,输出最短路径和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 萤火虫算法&#xff08;Firefly Algorithm&#xff0c;FA&#xff09;是由剑桥大学的Xin-She Yang在2008年提出的一种元启发式优化算法。该算法的灵感来源于萤火虫闪烁的行为特征&#xff0c;主要用于解决连续的优化问题。萤…

在 Gorm 中学习分页和排序

一个全面的指南&#xff0c;教您在 GORM 中实现分页和排序&#xff0c;以实现高效的数据检索和展示 高效的数据检索和展示是应用程序开发的关键方面。GORM&#xff0c;强大的 Go 对象关系映射库&#xff0c;为开发人员提供了强大的工具来实现这一目标。在本指南中&#xff0c;…

去中心化数据云项目Oort主网即将上线

备受期待的去中心化数据云项目Oort&#xff0c;今日已通过官方X账号官宣&#xff0c;将于纽约时间11月27日正式上线主网Olympus Protocol。届时&#xff0c;用户也能够通过Oort的Ale Wallet钱包和开发者API使用主网&#xff0c;并可通过OORT浏览器查询交易和合约&#xff0c;开…

代码随想录 Day41 动态规划09 LeetCode T121 买卖股票的最佳时机 T122 买卖股票的最佳时机II

前言 这两题看起来是不是有点眼熟,其实我们在贪心章节就已经写过了这两道题,当时我们用的是将利润分解,使得我们始终得到的是最大利润 假如第 0 天买入&#xff0c;第 3 天卖出&#xff0c;那么利润为&#xff1a;prices[3] - prices[0]。 相当于(prices[3] - prices[2]) (pri…

小程序 打开方式 页面效果 表单页面 点击跳到详情页 图标 获取后台数据 进行页面渲染

请求地址&#xff1a;geecg-uniapp 同源策略 数据请求 获取后台数据 ui库安装 冲突解决&#xff08;3&#xff09;-CSDN博客 一.uniapp转小程序 (1) 运行微信开发工具 &#xff08;2&#xff09; 配置id 然后运行 打开小程序 路径 E:\通\uniapp-jeecg\unpackage\dist\d…

MySQL -- mysql connect

MySQL – mysql connect 文章目录 MySQL -- mysql connect一、Connector/C 使用1.环境安装2.尝试链接mysql client 二、MySQL接口1.初始化2.链接数据库3.下发mysql命令4.获取执行结果5.关闭mysql链接6.在C语言中连接MySQL 三、MySQL图形化界面推荐 使用C接口库来进行连接 一、…

ppt聚光灯效果

1.放入三张图片内容或其他 2.全选复制成图片 3.设置黑色矩形&#xff0c;透明度30% 4.粘贴复制后的图片&#xff0c;制定图层 5.插入椭圆&#xff0c;先选中矩形&#xff0c;再选中椭圆&#xff0c;点击绘图工具&#xff0c;选择相交即可&#xff08;关键&#xff09;

python二维码识别系统的设计与实现

大家好我是玥沐春风&#xff0c;今天分享一个python二维码识别系统的设计与实现&#xff0c;项目源码以及部署相关请联系我&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 本项目是在对二维码的应用服务场景进行了深入的分析&#xff0c;通过利用Python技术来开发一款…

警告:未配置spring boot 配置注解处理器

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 问题 我再使用ConfigurationProperties(prefix “redisson”)去加载配置文件中的属性的时候&#xff0c;发现idea有个警告 并且配…

uni-app基于vue实现商城小程序

目录 一、前言 二、功能效果图 1.首页 2.分类 ​3.活动 4.我的 ​5.商品详情 6.购物车 三、代码实现 1.项目结构截图 uni-app&#xff0c;Hbuilder 2.首页源码 3.数据模拟通讯 四、总结 一、前言 参考“网易严选”小程序 项目采用传统vue项目结构&#xff0c;即u…

【123. 买卖股票的最佳时机 III】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:const int Init-0x3f3f3f3f;int maxProfit(vector<int>& prices) {int nprices.size();vector<vector<int>> f(n,vector<int>(3,Ini…

python开发过程中注意编码规范~

文章目录 一、 代码编排二、 文档编排三、 空格的使用四、 注释五、 文档描述六、 命名规范总体原则&#xff0c;新编代码必须按下面命名风格进行&#xff0c;现有库的编码尽量保持风格。七 编码建议关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、…

SpectralDiff论文阅读笔记

高光谱图像分类是遥感领域的一个重要问题&#xff0c;在地球科学中有着广泛的应用。近年来&#xff0c;人们提出了大量基于深度学习的HSI分类方法。然而&#xff0c;现有方法处理高维、高冗余和复杂数据的能力有限&#xff0c;这使得捕获数据的光谱空间分布和样本之间的关系具有…

MySQL -- 用户管理

MySQL – 用户管理 文章目录 MySQL -- 用户管理一、用户1.用户信息2.创建用户3.删除用户4.远端登录MySQL5.修改用户密码6.数据库的权限 一、用户 1.用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中&#xff1a; host&#xff1a; 表示这个用户可以从…

windows系统下查看安卓apk的sha1

1.在apk所在文件夹打开cmd或者powershell 2.输入 certutil -hashfile xxx.apk SHA1 这样就可以了 3.指令格式 certutil -hashfile FileName [HashAlgorithm] certutil -hashfile&#xff1a;原样输入 FileName&#xff1a;文件名 HashAlgorithm&#xff1a;可选项包括&…

【unity实战】Unity实现2D人物双击疾跑

最终效果 前言 我们要实现的功能是双击疾跑&#xff0c;当玩家快速地按下同一个移动键两次时能进入跑步状态 我假设快速按下的定义为0.2秒内&#xff0c;按下同一按键两次 简单的分析一下需求&#xff0c;实现它的关键在于获得按键按下的时间&#xff0c;我们需要知道第一次…

ArcGIS进阶:水源涵养功能分级评价操作

首先抛出水源涵养重要性评价的公式&#xff1a;水源涵养量降雨量-蒸散发量-地表径流量&#xff0c;其中地表径流量降雨量*平均地表径流系数 声明&#xff1a;以下数据来源于来自于牛强老师书籍&#xff08;城乡规划GIS技术&#xff09;。 以下给出重要性评价阈值表&#xff1…

什么是final修饰 使用final修饰类、方法、变量的区别?

简介: 变量成为常量&#xff0c;不允许修改 当final修饰类时&#xff0c;该类变为最终类&#xff08;或称为不可继承的类&#xff09;。不能从最终类派生子类。这样做的目的是为了防止其他类修改或扩展最终类的行为。当final修饰方法时&#xff0c;该方法成为最终方法&#xf…