import tkinter as tk try: #绝对会报错,只是用于高亮提示,可以删除,真正的导入部分在Kernel import sys.kernel.UI as UI from sys.kernel.tools import * except: pass class Notepad_base(UI.Window): def __init__(self): super().__init__() self.TitleText.config(text="记事本") self.geometry(f'750x550+{self.winfo_screenwidth() // 4}+{self.winfo_screenheight() // 8}') self.Menu=UI.Menu(self) """ 文件菜单 """ self.fileMenu = tk.Menu(self, tearoff=0) self.Menu.add_sub(label='文件(F)', menu=self.fileMenu) self.fileMenu.add_command(label=f'新建(N){" " * 28}Ctrl+N') self.fileMenu.add_command(label=f'新窗口(W){" " * 16}Ctrl+Shift+N') self.fileMenu.add_command(label=f'打开(O)...{" " * 26}Ctrl+O') self.fileMenu.add_command(label=f'保存(S){" " * 29}Ctrl+S') self.fileMenu.add_command(label=f'另存为(A)...{" " * 15}Ctrl+Shift+S') self.fileMenu.add_command(label=f'页面设置(U)...') self.fileMenu.add_command(label=f'打印(P)...{" " * 27}Ctrl+P') self.fileMenu.add_command(label=f'退出(X)') """ 编辑菜单 """ # 创建二级菜单栏(此时为空) self.editMenu = tk.Menu(self, tearoff=0) # 向一级菜单栏添加 编辑 项,并与二级菜单(editMenu)建立级联关系(从属/上下级) self.Menu.add_sub(label='编辑(E)', menu=self.editMenu) # 编辑的二级菜单栏添加 ... 项 self.editMenu.add_command(label=f'撤销(U){" " * 26}Ctrl+Z') self.editMenu.add_command(label=f'剪切(T){" " * 26}Ctrl+X') self.editMenu.add_command(label=f'复制(C){" " * 26}Ctrl+C') self.editMenu.add_command(label=f'粘贴(V){" " * 26}Ctrl+V') self.editMenu.add_command(label=f'删除(L){" " * 27}Delete') self.editMenu.add_command(label=f'使用 Bing 搜索...{" " * 14}Ctrl+E') self.editMenu.add_command(label=f'查找(F)...{" " * 25}Ctrl+F') self.editMenu.add_command(label=f'查找上一个(N){" " * 23}F3') self.editMenu.add_command(label=f'查找下一个(V){" " * 15}Shift+F3') self.editMenu.add_command(label=f'替换(R)...{" " * 23}Ctrl+H') self.editMenu.add_command(label=f'转到(G)...{" " * 23}Ctrl+G') self.editMenu.add_command(label=f'全选(A){" " * 26}Ctrl+A') self.editMenu.add_command(label=f'时间/日期(D){" " * 25}F5') """ 格式菜单 """ # 全局变量 self.word_wrap = tk.BooleanVar(value=True) # 是否选择勾上 # 创建二级菜单栏(此时为空) self.formatMenu = tk.Menu(self, tearoff=0) # 向一级菜单栏添加 格式 项,并与二级菜单(formatMenu)建立级联关系(从属/上下级) self.Menu.add_sub(label='格式(O)', menu=self.formatMenu) # 格式的二级菜单栏添加 ... 项 self.formatMenu.add_checkbutton(label='自动换行(W)', variable=self.word_wrap, onvalue=1, offvalue=0) self.formatMenu.add_command(label='字体(F)...') """ 查看菜单 """ # 全局变量 self.state = tk.BooleanVar(value=True) # 创建二级菜单栏(此时为空) self.viewMenu = tk.Menu(self, tearoff=0) # 向一级菜单栏添加 查看 项,并与二级菜单(checkMenu)建立级联关系(从属/上下级) self.Menu.add_sub(label='查看(V)', menu=self.viewMenu) # 创建三级菜单栏(此时为空) self.threeViewMenu = tk.Menu(self.viewMenu, tearoff=0) # 查看的二级菜单栏添加 ... 项 self.viewMenu.add_cascade(label='缩放(Z)', menu=self.threeViewMenu) self.viewMenu.add_checkbutton(label='状态栏(S)', variable=self.state, onvalue=1, offvalue=0) # 缩放的三级菜单栏添加 ... 项 self.threeViewMenu.add_command(label=f'放大(I){" " * 14}Ctrl + 加号') self.threeViewMenu.add_command(label=f'缩小(O){" " * 13}Ctrl + 减号') self.threeViewMenu.add_command(label=f'恢复默认缩放{" " * 11}Ctrl+0') """ 帮助菜单 """ # 创建二级菜单栏(此时为空) self.helpMenu = tk.Menu(self, tearoff=0) # 向一级菜单栏添加 帮助 项,并与二级菜单(helpMenu)建立级联关系(从属/上下级) self.Menu.add_sub(label='帮助(H)', menu=self.helpMenu) # 帮助的二级菜单栏添加 ... 项 self.helpMenu.add_command(label='查看帮助(H)') self.helpMenu.add_command(label='发送反馈(F)') self.helpMenu.add_command(label='关于文本编辑器(A)') # 菜单之间插入分隔线 self.helpMenu.insert_separator(2) """ 右键菜单 """ # 创建二级菜单栏(此时为空) self.rightKeyMenu = tk.Menu(self, tearoff=0) # 创建三级菜单栏(此时为空) self.threeRightMenu = tk.Menu(self.rightKeyMenu, tearoff=0) # 右键菜单的二级菜单栏添加 ... 项 self.rightKeyMenu.add_command(label='撤销(U)') self.rightKeyMenu.add_command(label='剪切(T)') self.rightKeyMenu.add_command(label='复制(C)') self.rightKeyMenu.add_command(label='粘贴(P)') self.rightKeyMenu.add_command(label='删除(D)') self.rightKeyMenu.add_command(label='全选(A)') self.rightKeyMenu.add_checkbutton(label='从右到左的阅读顺序(R)') self.rightKeyMenu.add_checkbutton(label='显示 Unicode 控制字符(S)') self.rightKeyMenu.add_cascade(label='插入 Unicode 控制字符(I)', menu=self.threeRightMenu) self.rightKeyMenu.add_command(label='关闭输入法(L)') self.rightKeyMenu.add_command(label='汉字重选(R)') self.rightKeyMenu.add_command(label='使用 Bing 搜索(B)...') # 插入 Unicode 控制字符(I)的三级菜单栏添加 ... 项 self.threeRightMenu.add_command(label='特殊字符1') self.threeRightMenu.add('command', label='特殊字符2') self.threeRightMenu.insert(3, 'command', label='特殊字符3') # ... # 菜单之间插入分隔线 self.rightKeyMenu.insert_separator(1) self.rightKeyMenu.insert_separator(6) self.rightKeyMenu.insert_separator(8) self.rightKeyMenu.insert_separator(12) self.rightKeyMenu.insert_separator(15) # 捆绑鼠标右键事件 self.bind('', lambda event: self.rightKeyEvent(event, self.rightKeyMenu)) """ 底行内容显示 """ # 底部内容框架 self.bottomFrame = tk.Frame(self.Widget) self.bottomFrame.pack(side=tk.BOTTOM, fill='both') # 状态栏框架 self.stateFrame = tk.Frame(self.bottomFrame) self.stateFrame.pack(side=tk.BOTTOM, fill='both') # 字符编码 self.charCodeLabel = tk.Label(self.stateFrame,text=' UTF-8',width=16,anchor='w') self.charCodeLabel.pack(side=tk.RIGHT) # 换行方式(回车换行) self.CRLFlabel = tk.Label(self.stateFrame,text=' Windows (CRLF)',width=17,anchor='w') self.CRLFlabel.pack(side=tk.RIGHT) # 字体大小 self.fontSizeLabel = tk.Label(self.stateFrame, text='100%', width=6) self.fontSizeLabel.pack(side=tk.RIGHT) # 光标位置 self.locationLabel = tk.Label(self.stateFrame,text=' 第 1 行,第 1 列',width=19,anchor='w') self.locationLabel.pack(side=tk.RIGHT) # 右侧滚动条 self.rightScrollbar = tk.Scrollbar(self.Widget, orient='vertical') self.rightScrollbar.pack(side=tk.RIGHT, fill='both') # 底侧滚动条 self.bottomScrollbar = tk.Scrollbar(self.bottomFrame, orient="horizontal") self.bottomScrollbar.pack(side=tk.BOTTOM, fill='both') # 文本编辑区域 self.text = tk.Text(self.Widget) self.text.pack(expand=True, fill='both') # 将焦点设置到Text控件上 self.text.focus() # 修改窗口标题的图片 self.notepad_photo = tk.PhotoImage(file=app_info["path"]+"ICO.png") self.TitleICO.config(image=self.notepad_photo) self.TaskICO.config(image=self.notepad_photo) self.TaskICO.update() self.open() # Text文本鼠标右键菜单事件 def rightKeyEvent(self, event, object): object.post(event.x_root, event.y_root) def open(self): if os.path.isfile(kw["f"]): self.text.insert("insert",openr(kw["f"],2)) # 代码测试 if __name__ == '__main__': ui = Notepad_base() # 实例化记事本UI ui.mainloop() # 循环窗口运行 else: print(f'导入【{__name__}】')