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


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

    下一篇:敬请耐心等待,如发现BUG以及建议,请在评论区发表,谢谢!

    相对上一篇文章,本篇文章的文本编辑器UI与Windows的记事本不能说是一毛一样,但绝对是失散多年的双胞胎集美。不仅长着一样的外表,内心还像周公辣么大,装着十个海王,根本吃不完。总而言之,言而总之,泰库辣!!!

    运行结果

    设计代码

    1. """
    2. 文本编辑器
    3. """
    4. # 通配符
    5. __all__ = ['main']
    6. # 鼠标右键菜单
    7. def rightKeyEvent(event, object):
    8. object.post(event.x_root, event.y_root)
    9. # 主函数
    10. def main():
    11. import tkinter as tk
    12. from tkinter import font
    13. base = tk.Tk() # 新建一个窗口
    14. base.title('文本编辑器') # 窗口标题
    15. base.geometry(f'750x550+{base.winfo_screenwidth()//4}+{base.winfo_screenheight()//8}')
    16. # 菜单栏
    17. menubar = tk.Menu(base)
    18. base.config(menu=menubar)
    19. # 二级菜单 文件
    20. fileMenu = tk.Menu(menubar, tearoff=0)
    21. fileMenu.add_command(label=f'新建(N){" "*28}Ctrl+N')
    22. fileMenu.add_command(label=f'新窗口(W){" "*16}Ctrl+Shift+N')
    23. fileMenu.add_command(label=f'打开(O)...{" "*26}Ctrl+O')
    24. fileMenu.add_command(label=f'保存(S){" "*29}Ctrl+S')
    25. fileMenu.add_command(label=f'另存为(A)...{" "*15}Ctrl+Shift+S')
    26. fileMenu.add_command(label=f'页面设置(U)...')
    27. fileMenu.add_command(label=f'打印(P)...{" "*27}Ctrl+P')
    28. fileMenu.add_command(label=f'退出(X)')
    29. menubar.add_cascade(label='文件(F)', menu=fileMenu)
    30. # 二级菜单 编辑
    31. editMenu = tk.Menu(menubar, tearoff=0)
    32. editMenu.add_command(label=f'撤销(U){" "*26}Ctrl+Z')
    33. editMenu.add_command(label=f'剪切(T){" "*26}Ctrl+X')
    34. editMenu.add_command(label=f'复制(C){" "*26}Ctrl+C')
    35. editMenu.add_command(label=f'粘贴(V){" "*26}Ctrl+V')
    36. editMenu.add_command(label=f'删除(L){" "*27}Delete')
    37. editMenu.add_command(label=f'使用 Bing 搜索...{" "*14}Ctrl+E')
    38. editMenu.add_command(label=f'查找(F)...{" "*25}Ctrl+F')
    39. editMenu.add_command(label=f'查找上一个(N){" "*23}F3')
    40. editMenu.add_command(label=f'查找下一个(V){" "*15}Shift+F3')
    41. editMenu.add_command(label=f'替换(R)...{" "*23}Ctrl+H')
    42. editMenu.add_command(label=f'转到(G)...{" "*23}Ctrl+G')
    43. editMenu.add_command(label=f'全选(A){" "*26}Ctrl+A')
    44. editMenu.add_command(label=f'时间/日期(D){" "*25}F5')
    45. menubar.add_cascade(label='编辑(E)', menu=editMenu)
    46. # 二级菜单 格式
    47. integer1 = tk.IntVar()
    48. formatMenu = tk.Menu(menubar, tearoff=0)
    49. formatMenu.add_checkbutton(label='自动换行(W)', variable=integer1, onvalue=0, offvalue=1)
    50. formatMenu.add_command(label='字体(F)...')
    51. menubar.add_cascade(label='格式(O)', menu=formatMenu)
    52. # 二级菜单 查看
    53. integer2 = tk.IntVar()
    54. checkMenu = tk.Menu(menubar, tearoff=0)
    55. # 三级菜单 缩放(Z)
    56. twoCheckMenu = tk.Menu(checkMenu, tearoff=0)
    57. twoCheckMenu.add_command(label=f'放大(I){" "*14}Ctrl + 加号')
    58. twoCheckMenu.add_command(label=f'缩小(O){" "*13}Ctrl + 减号')
    59. twoCheckMenu.add_command(label=f'恢复默认缩放{" "*11}Ctrl+0')
    60. checkMenu.add_cascade(label='缩放(Z)', menu=twoCheckMenu)
    61. checkMenu.add_checkbutton(label='状态栏(S)', variable=integer2, onvalue=0, offvalue=1)
    62. menubar.add_cascade(label='查看(V)', menu=checkMenu)
    63. # 二级菜单 帮助
    64. helpMenu = tk.Menu(menubar, tearoff=0)
    65. helpMenu.add_command(label='查看帮助(H)')
    66. helpMenu.add_command(label='发送反馈(F)')
    67. helpMenu.add_command(label='关于文本编辑器(A)')
    68. menubar.add_cascade(label='帮助(H)', menu=helpMenu)
    69. # 右键菜单
    70. rightKeyMenu = tk.Menu(base, tearoff=0)
    71. rightKeyMenu.add_command(label='撤销(U)')
    72. rightKeyMenu.add_command(label='剪切(T)')
    73. rightKeyMenu.add_command(label='复制(C)')
    74. rightKeyMenu.add_command(label='粘贴(P)')
    75. rightKeyMenu.add_command(label='删除(D)')
    76. rightKeyMenu.add_command(label='全选(A)')
    77. rightKeyMenu.add_checkbutton(label='从右到左的阅读顺序(R)')
    78. rightKeyMenu.add_checkbutton(label='显示 Unicode 控制字符(S)')
    79. # 三级级菜单 插入 Unicode 控制字符(I)
    80. twoRightMenu = tk.Menu(rightKeyMenu, tearoff=0)
    81. twoRightMenu.add_command(label='特殊字符')
    82. # ...
    83. rightKeyMenu.add_cascade(label='插入 Unicode 控制字符(I)', menu=twoRightMenu)
    84. rightKeyMenu.add_command(label='关闭输入法(L)')
    85. rightKeyMenu.add_command(label='汉字重选(R)')
    86. # 捆绑鼠标右键事件
    87. base.bind('', lambda event: rightKeyEvent(event, rightKeyMenu))
    88. # 底行内容显示
    89. bottomFrame = tk.Frame(base, borderwidth=2, relief=tk.GROOVE)
    90. bottomFrame.pack(side=tk.BOTTOM, fill='both')
    91. # 字符编码
    92. charCodeLabel = tk.Label(bottomFrame, text=' UTF-8', width=16, anchor='w', borderwidth=2, relief=tk.GROOVE)
    93. charCodeLabel.pack(side=tk.RIGHT)
    94. # 换行方式(回车换行)
    95. CRLFlabel = tk.Label(bottomFrame, text=' Windows (CRLF)', width=17, anchor='w', borderwidth=2, relief=tk.GROOVE)
    96. CRLFlabel.pack(side=tk.RIGHT)
    97. # 字体大小
    98. fontSizeLabel = tk.Label(bottomFrame, text='100%', width=6, borderwidth=2, relief=tk.GROOVE)
    99. fontSizeLabel.pack(side=tk.RIGHT)
    100. # 光标位置
    101. locationLabel = tk.Label(bottomFrame, text=' 第 1 行,第 1 列', width=19, anchor='w', borderwidth=2, relief=tk.GROOVE)
    102. locationLabel.pack(side=tk.RIGHT)
    103. # 右侧滚动条
    104. scrollbar = tk.Scrollbar(base)
    105. scrollbar.pack(side=tk.RIGHT, fill='both')
    106. # 文本编辑区域
    107. setFont = font.Font(family='Tahoma', size=12)
    108. textData = tk.Text(base, wrap='word', yscrollcommand=scrollbar.set, font=setFont)
    109. textData.pack(fill='both', expand=True)
    110. scrollbar.config(command=textData.yview)
    111. # 修改窗口标题的图片
    112. icon = tk.PhotoImage(file='.\\..\\photo\\记事本.png')
    113. base.iconphoto(True, icon)
    114. base.mainloop() # 窗口主循环
    115. # 代码测试
    116. if __name__ == '__main__':
    117. main()
    118. else:
    119. print(f'导入{__name__}模块')

    作者:周华

    创作日期:2023/11/9

  • 相关阅读:
    php危险函数及rce漏洞
    Redis数据类型-String-基本使用和原理
    MySQL InnoDB 表不存在问题修复
    JudgeOpen整理
    word 字号 与 px pt 对应关系
    PHP8中字符串与数组的转换-PHP8知识详解
    【Leetcode刷题】二分查找
    设计模式使用场景
    选择结构——分段函数练习题2
    [leetcode] 1675. 数组的最小偏移量 | 思维贪心 | 大疆笔试题
  • 原文地址:https://blog.csdn.net/zhouhua2022/article/details/134319797