python编辑编程器_用Python制作编辑器

import tkinter

import tkinter as tk

from tkinter import *

import tkinter.filedialog

import tkinter.messagebox

import tkinter.scrolledtext

import tkinter.colorchooser

import tkinter.simpledialog

# ----------------------------------------一、创建窗口-------------------------------------------------

filename = "" # 定义空文件名

win = tk.Tk()

win["height"] = 400

win["width"] = 600

# -----------------------------------------------------------------------------------------------------

# ---------------------------------------二、功能定义区---------------------------------------------

# -----------------------------------------1.菜单栏 File-----------------------------------------------------------

textChanged = tk.IntVar(value=0) # 字符串计数器

# 1.打开

def Open():

global filename

# 1.获取字符,是否保存原来的文档

if textChanged.get():

yesno = tk.messagebox.askyesno(

title="Save or not", message="Do you want to Save?") # 询问框

if yesno == tkinter.YES:

Save()

filename = tkinter.filedialog.askopenfilename(

title="Open file", filetypes=[("Text files", "*.txt")]) # 打开路径框

# 2.打开新的文档

if filename:

txtContent.delete(0.0, tk.END) # 删除原来的文本

fp = open(filename, "rb") # 读取文本

txtContent.insert(tkinter.INSERT, "".join(

fp.read().decode('GBK'))) # 解码插入到文本编辑器

fp.close() # 关闭指针

textChanged.set(0) # 字符串置0

# 2.保存

def Save():

global filename

if not filename:

SaveAs()

elif textChanged.get():

fp = open(filename, "w") # 创建文本

fp.write(txtContent.get(0.0, tkinter.END)) # 将文本框的内容导入文件

fp.close() # 关闭

textChanged.set(0) # 计数器置0

# 3.保存到

def SaveAs():

global filename

# 创建对话框,默认对应的路径和文件名

newfilename = tkinter.filedialog.asksaveasfilename(

title="Save As", initialdir=r"c:\\", initialfile="new.txt")

# 写入文件内容

if newfilename:

fp = open(newfilename, "w")

fp.write(txtContent.get(0.0, tkinter.END))

fp.close()

filename = newfilename

textChanged.set(0)

# 4.关闭

def Close():

global filename

Save() # 保存

txtContent.delete(0.0, tkinter.END) # 区域置空

filename = "" # 文件名置空

# -------------------------------------------2.菜单栏 Edit-----------------------------------------------------------

# 1.回退

def Undo():

txtContent["undo"] = True

try:

txtContent.edit_undo()

except Exception as e:

pass

# 2.前进

def Redo():

txtContent["undo"] = True

try:

txtContent.edit_redo()

except Exception as e:

pass

# 3.复制

def Copy():

txtContent.clipboard_clear() # 清空缓冲区

txtContent.clipboard_append(txtContent.selection_get()) # 保存到缓冲区

pass

# 4.剪切

def Cut():

Copy() # 复制文本

txtContent.delete(tkinter.SEL_FIRST, tkinter.SEL_LAST) # 删除文本编译器的选中文本

# 5.粘贴

def Paste():

try:

txtContent.insert(tkinter.SEL_FIRST,

txtContent.clipboard_get()) # 获取缓冲区文本

txtContent.delete(tkinter.SEL_FIRST, tkinter.SEL_LAST) # 删除选中文本

return

except Exception as e:

pass

# 6.查找

def Search():

textToSearch = tkinter.simpledialog.askstring(

title="Search", prompt="What to search?")

start = txtContent.search(textToSearch, 0.0, tkinter.END)

if start: # 查找到时,返回yes

tkinter.messagebox.showinfo(title="Found", message="ok")

# --------------------------------------------3.菜单栏 Help-----------------------------------------------------------

# 1,关于

def About():

tkinter.messagebox.showinfo(

title="About", message="Author:Dong Fuguo") # 弹出信息框

pass

# -------------------------------------------------------------------------------------------------------------------

# ------------------------------------三、菜单栏框架----------------------------------

menu1 = tk.Menu(win)

# 菜单1 File

# ---------------------------------------------------------------------

submenu = tk.Menu(menu1, tearoff=0)

submenu.add_command(label="Open", command=Open)

submenu.add_separator()

submenu.add_command(label="Save", command=Save)

submenu.add_separator()

submenu.add_command(label="SaveAs", command=SaveAs)

submenu.add_separator()

submenu.add_command(label="Close", command=Close)

menu1.add_cascade(label="File", menu=submenu)

# -----------------------------------------------------------------------

# 菜单2 Edit

# -----------------------------------------------------------------------

submenu2 = tk.Menu(menu1, tearoff=0)

submenu2.add_command(label="Undo", command=Undo)

submenu2.add_separator()

submenu2.add_command(label="Redo", command=Redo)

submenu2.add_separator()

submenu2.add_command(label="Copy", command=Copy)

submenu2.add_separator()

submenu2.add_command(label="Cut", command=Cut)

submenu2.add_separator()

submenu2.add_command(label="Paste", command=Paste)

submenu2.add_separator()

submenu2.add_command(label="Search", command=Search)

menu1.add_cascade(label="Edit", menu=submenu2)

# ------------------------------------------------------------------------

# 菜单3 Help

# ------------------------------------------------------------------------

submenu3 = tk.Menu(menu1, tearoff=0)

submenu3.add_command(label="About", command=About)

menu1.add_cascade(label="Help", menu=submenu3)

# ------------------------------------------------------------------------

# ----------------------------------------------------------------------------------------------------------

# ------------------------------------------四、总体结构---------------------------------

# 1.菜单栏

win.config(menu=menu1)

# 2.滑动文本框

def keyPress(event):

textChanged.set(1)

txtContent = tk.scrolledtext.ScrolledText(win, wrap=tk.WORD)

txtContent.pack(fill=tk.BOTH, expand=tkinter.YES) # 创建

txtContent.bind("", keyPress) # 绑定按键识别器

win.mainloop()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值