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


    下一篇:Python 使用tkinter复刻Windows记事本UI和菜单(二)-CSDN博客

    介绍:

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

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

    运行结果:

    项目代码

    1. """
    2. 文本编辑器
    3. """
    4. # 通配符
    5. __all__ = ['main']
    6. # 设置文本域窗口大小
    7. def setTextSize(event, object):
    8. print(event.width, event.height)
    9. print(event.width // 10, event.height // 19)
    10. object.config(width=event.width // 10, height=event.height // 19)
    11. # 主函数
    12. def main():
    13. import tkinter as tk
    14. from tkinter import font
    15. base = tk.Tk() # 新建一个窗口
    16. base.title('文本编辑器') # 窗口标题
    17. base.geometry(f'750x550+{base.winfo_screenwidth()//4}+{base.winfo_screenheight()//8}')
    18. # 新建顶级菜单
    19. topMenu = tk.Menu(base)
    20. base.config(menu=topMenu)
    21. # 二级菜单 文件
    22. fileMenu = tk.Menu(topMenu, tearoff=0)
    23. fileMenu.add_command(label=f'新建(N){" "*28}Ctrl+N')
    24. fileMenu.add_command(label=f'新窗口(W){" "*16}Ctrl+Shift+N')
    25. fileMenu.add_command(label=f'打开(O)...{" "*26}Ctrl+O')
    26. fileMenu.add_command(label=f'保存(S){" "*29}Ctrl+S')
    27. fileMenu.add_command(label=f'另存为(A)...{" "*15}Ctrl+Shift+S')
    28. fileMenu.add_command(label=f'页面设置(U)...')
    29. fileMenu.add_command(label=f'打印(P)...{" "*27}Ctrl+P')
    30. fileMenu.add_command(label=f'退出(X)')
    31. topMenu.add_cascade(label='文件(F)', menu=fileMenu)
    32. # 二级菜单 编辑
    33. editMenu = tk.Menu(topMenu, tearoff=0)
    34. editMenu.add_command(label=f'撤销(U){" "*26}Ctrl+Z')
    35. editMenu.add_command(label=f'剪切(T){" "*26}Ctrl+X')
    36. editMenu.add_command(label=f'复制(C){" "*26}Ctrl+C')
    37. editMenu.add_command(label=f'粘贴(V){" "*26}Ctrl+V')
    38. editMenu.add_command(label=f'删除(L){" "*27}Delete')
    39. editMenu.add_command(label=f'使用 Bing 搜索...{" "*14}Ctrl+E')
    40. editMenu.add_command(label=f'查找(F)...{" "*25}Ctrl+F')
    41. editMenu.add_command(label=f'查找上一个(N){" "*23}F3')
    42. editMenu.add_command(label=f'查找下一个(V){" "*15}Shift+F3')
    43. editMenu.add_command(label=f'替换(R)...{" "*23}Ctrl+H')
    44. editMenu.add_command(label=f'转到(G)...{" "*23}Ctrl+G')
    45. editMenu.add_command(label=f'全选(A){" "*26}Ctrl+A')
    46. editMenu.add_command(label=f'时间/日期(D){" "*25}F5')
    47. topMenu.add_cascade(label='编辑(E)', menu=editMenu)
    48. # 二级菜单 格式
    49. integer1 = tk.IntVar()
    50. formatMenu = tk.Menu(topMenu, tearoff=0)
    51. formatMenu.add_checkbutton(label='自动换行(W)', variable=integer1, onvalue=0, offvalue=1)
    52. formatMenu.add_command(label='字体(F)...')
    53. topMenu.add_cascade(label='格式(O)', menu=formatMenu)
    54. # 二级菜单 查看
    55. integer2 = tk.IntVar()
    56. checkMenu = tk.Menu(topMenu, tearoff=0)
    57. checkMenu.add_command(label='缩放(Z)')
    58. checkMenu.add_checkbutton(label='状态栏(S)', variable=integer2, onvalue=0, offvalue=1)
    59. topMenu.add_cascade(label='查看(V)', menu=checkMenu)
    60. # 二级菜单 帮助
    61. helpMenu = tk.Menu(topMenu, tearoff=0)
    62. helpMenu.add_command(label='查看帮助(H)')
    63. helpMenu.add_command(label='发送反馈(F)')
    64. helpMenu.add_command(label='关于文本编辑器(A)')
    65. topMenu.add_cascade(label='帮助(H)', menu=helpMenu)
    66. # 文本编辑区域
    67. setFont = font.Font(family='Tahoma', size=12, weight='bold')
    68. textData = tk.Text(base, wrap=tk.WORD, font=setFont)
    69. textData.grid()
    70. # 初始化设置
    71. # textData.config(width=106, height=42, background='red', font=setFont)
    72. # textData.config(width=75, height=29, background='red', font=setFont)
    73. # 绑定调整文本域大小到窗口大小变化事件
    74. base.bind("", lambda event: setTextSize(event, textData))
    75. base.mainloop() # 窗口主循环
    76. # 代码测试
    77. if __name__ == '__main__':
    78. main()
    79. else:
    80. print(f'导入{__name__}模块')

    作者:周华

    创作日期:2023/11/8

  • 相关阅读:
    基于Q-learning方法的地铁列车时刻表重新调度
    设计模式之备忘录模式
    Unity UGUI透明区域点击无效
    机器学习 LabelEncoding OnehotEncoding
    stm32cubemx图形化配置之 FreeRTOS选项中CMSIS_V1和CMSIS_V2的区别
    Zookeeper集群 + Kafka集群
    等额本金和等额本息还款方式的差异分析
    【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 源码介绍以及原理介绍
    SpringCloud接入nacos配置中心
    记录一个出现多次的小BUG:用串口读的数据,只能有一次赋值
  • 原文地址:https://blog.csdn.net/zhouhua2022/article/details/134299936