Python GUI标准库tkinter实现与记事本相同菜单的文本编辑器(一)

介绍:

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

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

运行结果:

项目代码

python 复制代码
"""
    文本编辑器
"""

# 通配符
__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

相关推荐
胖哥真不错25 分钟前
Python实现NOA星雀优化算法优化随机森林回归模型项目实战
python·机器学习·项目实战·随机森林回归模型·noa星雀优化算法
编程咕咕gu-26 分钟前
从零开始玩python--python版植物大战僵尸来袭
开发语言·python·python基础·pygame·python教程
柏木乃一32 分钟前
双向链表增删改查的模拟实现
开发语言·数据结构·算法·链表
cherryc_1 小时前
JavaSE基础——第六章 类与对象(二)
java·开发语言
代码的乐趣1 小时前
支持selenium的chrome driver更新到135.0.7049.42
chrome·python·selenium
SsummerC4 小时前
【leetcode100】数组中的第K个最大元素
python·算法·leetcode
伊玛目的门徒4 小时前
解决backtrader框架下日志ValueError: I/O operation on closed file.报错(jupyternotebook)
python·backtrader·量化·日志管理·回测
java1234_小锋5 小时前
一周学会Pandas2 Python数据处理与分析-编写Pandas2 HelloWord项目
python·pandas·python数据分析·pandas2
Qlittleboy6 小时前
windows如何安装wkhtmltoimage 给PHP使用根据HTML生成图片
开发语言·windows·php
凯强同学6 小时前
第十四届蓝桥杯大赛软件赛省赛Python 大学 C 组:7.翻转
python·算法·蓝桥杯