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/133777.html

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

相关文章

探索云世界的无限可能

文章目录 每日一句正能量前言云计算的定义和现状云计算能做什么&#xff1f;云计算市场的新特征需求方向&#xff1a;云计算的基础服务已经稳固&#xff0c;行业解决方案是新的发力点模式方向&#xff1a;分布式云模式方向&#xff1a;边缘计算是一朵新的云技术方向&#xff1a…

SQL 聚合函数

前言 SQL中的聚合函数是对一组值执行计算&#xff0c;并返回单个值的函数。 常用的聚合函数有&#xff1a; 函数作用AVG&#xff08;&#xff09;求平均值MAX&#xff08;&#xff09;求最大值MIN&#xff08;&#xff09;求最小值SUM&#xff08;&#xff09;求和COUNT&…

若依vue-初步下载使用

若依框架可以满足大部分的后台管理系统的开发,使用频率也是比较高的,所以这里讲一下如何使用若依框架 若依框架代码克隆 首先去若依官网 http://www.ruoyi.vip/ 这里演示的是若依-vue版本的使用 我们点击下载 会跳转到码云仓库 或者直接点击下面的链接去码云仓库 https://git…

第一章《补基础:不怕学不懂微积分》笔记

微积分包含众多知识点&#xff0c;例如极限概念、求导公式、乘积法则、链式法则、隐函数求导、 积分中值定理、泰勒公式等。其中&#xff0c;研究导数、微分及其应用的部分一般称为微分学&#xff0c;研究不定积分、定积分及其应用的部分一般称为积分学。微分学和积分学统称为微…

动态规划学习——多状态dp(打家劫舍问题)

一&#xff0c;打家劫舍I 题目&#xff1a; 一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自…

Gold-YOLO最新YOLO系列模型

论文地址https://arxiv.org/pdf/2309.11331.pdf 代码地址https://github.com/huawei-noah/Efficient-Computing 目录 01论文介绍 01摘要 02模型训练过程 01安装环境 02修改train中参数 01修改--data-path参数 02修改--conf-file参数 03其他参数设置 03训练 04出现问…

CA 陪你看 Ignite | 聚焦 Microsoft Ignite 2023

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0…

超级有效的12个远程团队管理技巧

前言 随着远程办公的兴起&#xff0c;虚拟管理团队已成为新常态。尽管混合和远程工作正在成为新常态&#xff0c;但管理远程团队也面临着一系列挑战。本文我们将为您提供 12个技巧&#xff0c;帮助您成功管理远程团队并改善协作。此外&#xff0c;我们将讨论定期接触点的重要性…

Python与ArcGIS系列(一)ArcGIS中使用Python

目录 0 简述1 arcgis中的python窗口2 开始编写代码 0 简述 按照惯例&#xff0c;作为本系列专栏的第一篇&#xff0c;先简单地介绍下本系列文章的内容&#xff1a;通过python语言创建arcgis环境脚本、将脚本以工具箱形式存放在arcgis中、通过脚本自动执行地理处理、数据修复、…

VScode配置C/C++环境

文章目录 一、下载MinGW二、配置环境变量三、VScode配置四、验证 一、下载MinGW MinGW官网 划到最下面找 二、配置环境变量 解压后放到自己想放的目录下 右键 此电脑–>属性–>高级系统设置—>环境变量–> 在cmd命令行检测&#xff0c;出现如下界面&#xff1a;…

【星海随笔】SDN neutron (二) Neutron-plugin(ML2)

Neutron架构之Neutron-plugin Core-plugin(ML2)篇 Neutron-server接收两种请求&#xff1a; REST API请求&#xff1a;接收REST API请求&#xff0c;并将REST API分发到对应的Plugin&#xff08;L3RouterPlugin&#xff09;。 RPC请求&#xff1a;接收Plugin agent请求&#…

操作系统(一)基础知识及操作系统启动

文章目录 前言前置基础知识计算机组成CPU磁盘内核中断、异常、系统调用局部性原理 启动操作系统计算机加电是如何正常执行服务的&#xff1f;开机自检BIOS&#xff08;Basic Input/Output System&#xff09;BootLoader 小结 前言 本文主要涉及操作系统的简介、硬件结构、内存…

Proteus仿真--基于数码管设计的可调式电子钟

本文主要介绍基于51单片机的数码管设计的可调式电子钟实验&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 其中数码管主要显示电子钟时间信息&#xff0c;按键用于调节时间 仿真运行视频 Proteus仿真--数码管设计的可调式电子钟&#xff08;仿真文件程…

WMS配送中心主要业务流程

业务流程图 入库 波次出库 按门店和门店所属送货路线确定出库波次 入库 出库 移库、封仓 门店欠货能要点 1. 日常补货&#xff1a;分拣仓位商品小于当前商品在该位置的补货下限的时候&#xff1b;生成对此进行补货任务&#xff1b;补货完成后确认任务&#xff0c;系统变更库存…

YOLOv8-Seg改进:分割注意力系列篇 | 高效多尺度注意力 EMA | ICASSP2023

🚀🚀🚀本文改进:EMA跨空间学习高效多尺度注意力引入到YOLOv8中进行二次创新,改进方法1)head层输出层结合;2)加入backbone; 🚀🚀🚀EMAAttention 亲测在多个数据集能够实现涨点,同样适用于小目标分割 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/…

探索内存函数的奥秘【memcpy、memmove、memset、memcmp】

目录 一&#xff0c;memcpy函数 1&#xff0c;memcpy函数简介 2&#xff0c;memcpy函数的原理 3&#xff0c;memcpy函数的用法 4&#xff0c;注意事项 5&#xff0c;memcpy函数模拟实现 二&#xff0c;memmove函数 1&#xff0c;memmove函数简介 2&#xff0c;memmove函…

实验室(检验科)信息系统源码,医学检验LIS系统源码,云LIS源码

实验室&#xff08;检验科&#xff09;信息系统源码&#xff0c;LIS源码&#xff0c;基于云计算技术的LIS系统源码&#xff0c;云LIS源码 LIS系统(LaboratoryInformationSystem) 即 实验室&#xff08;检验科&#xff09;信息系统&#xff0c;它是医院信息管理的重要组成部分之…

Vue3 源码解读系列(三)——组件渲染

组件渲染 vnode 本质是用来描述 DOM 的 JavaScript 对象&#xff0c;它在 Vue 中可以描述不同类型的节点&#xff0c;比如&#xff1a;普通元素节点、组件节点等。 vnode 的优点&#xff1a; 抽象&#xff1a;引入 vnode&#xff0c;可以把渲染过程抽象化&#xff0c;从而使得组…

用 winget 在 Windows 上安装 kubectl

目录 kubectl 是什么&#xff1f; 安装 kubectl 以管理员身份打开 PowerShell 使用 winget 安装 kubectl 测试一下&#xff0c;确保安装的是最新版本 导航到你的 home 目录&#xff1a; 验证 kubectl 配置 kubectl 是什么&#xff1f; kubectl 是 Kubernetes 的命令行工…

38 路由的过滤器配置

3.3.断言工厂 我们在配置文件中写的断言规则只是字符串&#xff0c;这些字符串会被Predicate Factory读取并处理&#xff0c;转变为路由判断的条件 例如Path/user/**是按照路径匹配&#xff0c;这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoute…