实验品-日记本

import tkinter as tk
import tkinter.scrolledtext as tkst
import fileinput
from tkinter import *
import os
from tkinter import messagebox, simpledialog, colorchooser, font

import win32clipboard
import tkinter.font
import tkinter.filedialog

t1 = []
root = None


def die(event=None):
    root.destroy()


def about():
    messagebox.showinfo(title="当前版本为1.0,欢迎使用", message="**作者:\n小哥哥")


# def newit(event):
# editorit = editor()
# editorit.neweditor()
class editor():
    def __init__(self, rt):
        if rt == None:
            self.t = tk.Tk()
        else:
            self.t = tk.Toplevel(rt)

        self.t.title("记事本%d" % (len(t1) + 1))

        self.frm_file = tk.Frame(rt)
        self.frm_file.grid(row=0, column=0, padx=0, sticky=W)
        self.btn_open = Button(self.frm_file, text="打开", relief=GROOVE, command=self.openfile)
        self.btn_open.pack(side=LEFT, padx=5, fill=BOTH, expand=1)
        self.btn_new = Button(self.frm_file, text="新建", relief=GROOVE, command=self.neweditor)
        self.btn_new.pack(side=LEFT, padx=5, fill=BOTH)
        self.btn_save = Button(self.frm_file, text="保存", relief=GROOVE, command=self.savefile)
        self.btn_save.pack(side=LEFT, padx=5, fill=BOTH)
        self.btn_saveas = Button(self.frm_file, text="另存为", relief=GROOVE, command=self.saveasfile)
        self.btn_saveas.pack(side=LEFT, padx=5, fill=BOTH)
        self.btn_exit = Button(self.frm_file, text="退出", relief=GROOVE, command=self.close)
        self.btn_exit.pack(side=RIGHT, padx=5, fill=BOTH)

        self.frm_edit = tk.Frame(rt)
        self.frm_edit.grid(row=0, column=1, padx=1, sticky=W)
        self.btn_copy = Button(self.frm_edit, text="复制")
        self.btn_copy.pack(side=LEFT, padx=5, fill=BOTH, expand=1)
        self.btn_cut = Button(self.frm_edit, text="剪切")
        self.btn_cut.pack(side=LEFT, padx=5, fill=BOTH, expand=1)
        self.btn_paste = Button(self.frm_edit, text="黏贴")
        self.btn_paste.pack(side=LEFT, padx=5, fill=BOTH, expand=1)
        self.btn_find = Button(self.frm_edit, text="查询")
        self.btn_find.pack(side=LEFT, padx=5, fill=BOTH, expand=1)
        self.btn_allselect = Button(self.frm_edit, text="全选")
        self.btn_allselect.pack(side=LEFT, padx=5, fill=BOTH, expand=1)
        self.btn_font = Button(self.frm_edit, text="字体样式")
        self.btn_font.pack(side=LEFT, padx=5, fill=BOTH, expand=1)
        self.btn_color = Button(self.frm_edit, text="字体颜色")
        self.btn_color.pack(side=LEFT, padx=5, fill=BOTH, expand=1)

        self.bar = tk.Menu(rt)
        self.filem = tk.Menu(self.bar)
        self.filem.add_separator()
        self.filem.add_command(label="新建", command=self.neweditor, accelerator="     Ctr +N")
        self.filem.bind_all("<Control-n>", self.neweditor)
        self.filem.add_separator()
        self.filem.add_command(label="打开", command=self.openfile, accelerator="     Ctr + O")
        self.filem.bind_all("<Control-o>", self.openfile)
        self.filem.add_separator()
        self.filem.add_command(label="保存", command=self.savefile, accelerator="     Ctr +S ")
        self.filem.bind_all("<Control-s>", self.savefile)
        self.filem.add_separator()
        self.filem.add_command(label="另存为", command=self.saveasfile, accelerator="     Ctr + D ")
        self.filem.bind_all("<Control-d>", self.saveasfile)

        self.filem.add_command(label="关闭", command=self.close, accelerator="     F4")
        self.filem.bind_all("<F4>", self.close)
        self.filem.add_separator()
        self.filem.add_command(label="退出", command=die, accelerator="     ESC")
        self.filem.bind_all("<Escape>", die)

        self.editm = tk.Menu(self.bar)
        self.editm.add_separator()
        self.editm.add_command(label="复制", command=self.copy, accelerator=" " * 10 + "Ctr + C")
        self.editm.bind_all("<Control-c>", self.copy)
        self.editm.add_separator()
        self.editm.add_command(label="黏贴", command=self.paste, accelerator=" " * 10 + "Ctr + V")
        self.editm.bind_all("<Control-v>", self.paste)
        self.editm.add_separator()
        self.editm.add_command(label="剪切", command=self.cut, accelerator=" " * 10 + "Ctr + X")
        self.editm.bind_all("<Control-x>", self.cut)
        self.editm.add_separator()
        self.editm.add_command(label="删除", command=self.delete_text, accelerator=" " * 10 + "Delete")
        self.editm.bind_all("<Delete>", self.delete_text)
        self.editm.add_separator()
        self.editm.add_command(label="查找", command=self.find_char, accelerator=" " * 10 + "Ctr +F")
        self.editm.bind_all("<Control-f>", self.find_char)
        self.editm.add_separator()
        self.editm.add_command(label="全选", command=self.select_char_all, accelerator=" " * 10 + "Ctr + A")
        self.editm.bind_all("<Control-a>", self.select_char_all)

        self.formm = tk.Menu(self.bar)
        self.formm.add_command(label="字体颜色", command=self.color_it, accelerator=" " * 10 + "Alt + C")
        self.formm.bind_all("<Alt-f>", self.color_it)
        self.formm.add_separator()
        self.formm.add_command(label="字体格式", command=self.font_it, accelerator=" " * 10 + "Alt + F")
        self.formm.bind_all("<Alt-f>", self.font_it)

        self.helpm = tk.Menu(self.bar)
        self.helpm.add_command(label="关于", command=about)

        self.bar.add_cascade(label="文件", menu=self.filem)
        self.bar.add_cascade(label="编辑", menu=self.editm)
        self.bar.add_cascade(label="格式", menu=self.formm)
        self.bar.add_cascade(label="帮助", menu=self.helpm)

        self.t.config(menu=self.bar)

        # self.f = tk.Frame(self.t,width = 512)
        # self.f.pack(expand =1)

        self.st = tkst.ScrolledText(self.t)
        self.st.grid(row=1, column=0, columnspan=3, pady=3)

    def close(self, event=None):
        self.t.destroy()

    def openfile(self, event=None):
        oname = tkinter.filedialog.askopenfilename(filetypes=[("打开文件", "*.txt")])
        if oname:
            for line in fileinput.input(oname):
                self.st.insert("1.0", line)
            self.t.title(oname)

    def savefile(self, event=None):
        if os.path.isfile(self.t.title()):
            opf = open(self.t.title(), "w")
            opf.write(self.st.get(1.0, tk.END))
            opf.flush()
            opf.close()

        else:
            sname = tkinter.filedialog.askopenfilename(title="保存好你的宝宝哟", filetypes=[("保存文件", "*.txt")],
                                                       defaultextension=".txt")
            if sname:
                ofp = open(sname, "w")
                ofp.write(self.st.get(1.0, tk.END))
                ofp.flush()
                ofp.close()
            self.t.title(sname)

    def saveasfile(self, event=None):
        sname = tkinter.filedialog.askopenfilename(title="保存好你的宝宝哟", filetypes=[("保存文件", "*.txt")],
                                                   defaultextension=".txt")
        if sname:
            ofp = open(sname, "w")
            ofp.write(self.st.get(1.0, tk.END))
            ofp.flush()

            ofp.close()
            self.t.title(sname)

    def neweditor(self, event=None):
        global root
        t1.append(editor(root))

    def copy(self, event=None):
        text = self.st.get(tk.SEL_FIRST, tk.SEL_LAST)
        self.st.clipboard_clear()
        self.st.clipboard_append(text)

    def paste(self, event=None):
        try:
            text = self.st.selection_get(selection="CLIPBOARD")
            self.st.insert(tk.INSERT, text)
            self.st.clipboard_clear()
        except tk.TclError:
            pass

    def cut(self, event=None):
        text = self.st.get(tk.SEL_FIRST, tk.SEL_LAST)
        self.st.delete(tk.SEL_FIRST, tk.SEL_LAST)
        self.st.clipboard_clear()
        self.st.clipboard_append(text)

    def delete_text(self):
        self.st.delete(tk.SEL_FIRST, tk.SEL_LAST)

    def find_char(self, event=None):
        target = simpledialog.askstring("简易文本编辑器", "寻找字符串")
        if target:
            end = self.st.index(tk.END)
            print(end)
            endindex = end.split(".")
            end_line = int(endindex[0])
            end_column = int(endindex[1])
            pos_line = 1
            pos_column = 0
            length = len(target)
            while pos_line <= end_line:
                if pos_line == end_line and pos_column + length > end_column:
                    break
                elif pos_line < end_line and pos_column + length > 500:
                    pos_line = pos_line + 1
                    pos_column = (pos_column + length) - 500
                    if pos_column > end_column:
                        break
                else:
                    pos = str(pos_line) + "." + str(pos_column)
                    where = self.st.search(target, pos, tk.END)
                    if where:
                        print(where)
                        where1 = where.split(".")
                        sele_end_col = str(int(where1[1]) + length)
                        sele = where1[0] + "." + sele_end_col
                        self.st.tag_add(tk.SEL, where, sele)
                        self.st.mark_set(tk.INSERT, sele)
                        self.st.see(tk.INSERT)
                        self.st.focus()

                        again = messagebox.askokcancel(title="继续查询么")
                        if again:
                            pos_line = int(where1[0])
                            pos_column = int(sele_end_col)
                        else:
                            aa = messagebox.showinfo(title="你终于还是放弃了我", message="你放弃了我--!")
                            if aa:
                                sys.exit()

    def select_char_all(self, event=None):
        self.st.tag_add(tk.SEL, 1.0, tk.END)
        self.st.see(tk.INSERT)
        self.st.focus()

    def color_it(self, event=None):
        color = colorchooser.askcolor()
        self.st["foreground"] = color[1]

    def font_it(self, event=None):
        self.t_font = tk.Toplevel()
        self.t_font.title("字体选择面板")
        self.label_size = Label(self.t_font, text="字体大小")
        self.label_shape = Label(self.t_font, text="字体形状")
        self.label_font = Label(self.t_font, text="字体类型")
        self.label_weight = Label(self.t_font, text="字体粗细")
        self.label_size.grid(row=0, column=0, padx=30)
        self.label_shape.grid(row=0, column=4, padx=30)
        self.label_font.grid(row=0, column=2, padx=30)
        self.label_weight.grid(row=0, column=6, padx=30)

        self.scroll_size = Scrollbar(self.t_font)
        self.scroll_size.grid(row=1, column=1, stick=NS)
        self.scroll_shape = Scrollbar(self.t_font)
        self.scroll_shape.grid(row=1, column=3, stick=NS)
        self.scroll_font = Scrollbar(self.t_font)
        self.scroll_font.grid(row=1, column=5, stick=NS)
        self.scroll_weight = Scrollbar(self.t_font)
        self.scroll_weight.grid(row=1, column=7, stick=NS)

        list_var_font = StringVar()
        list_var_size = StringVar()
        list_var_shape = StringVar()
        list_var_weight = StringVar()

        self.list_font = Listbox(self.t_font, selectmode=BROWSE, listvariable=list_var_font, exportselection=0)
        self.list_font.grid(row=1, column=2, padx=4)
        list_font_item = ["\"Arial\"", "\"Arial Baltic\"", "\"Arial Black\"", "\"Arial CE\"", "\"Arial CYR\"",
                          "\"Arial Greek\"", "\"Arial Narrow\"",
                          "\"Arial TUR\"", "\"Baiduan Number\"", "\"Batang,BatangChe\""]
        for item in list_font_item:
            self.list_font.insert(0, item)
        self.list_font.bind("<ButtonRelease-1>", self.change_font)

        self.list_shape = Listbox(self.t_font, selectmode=BROWSE, listvariable=list_var_shape, exportselection=0)
        self.list_shape.grid(row=1, column=4, padx=4)
        list_shape_item = ["italic", "roman"]
        for item in list_shape_item:
            self.list_shape.insert(0, item)
        self.list_shape.bind("<ButtonRelease-1>", self.change_shape)

        self.list_size = Listbox(self.t_font, selectmode=BROWSE, listvariable=list_var_size, exportselection=0)
        self.list_size.grid(row=1, column=0, padx=4)
        list_size_item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
        for item in list_size_item:
            self.list_size.insert(0, item)
        self.list_size.bind("<ButtonRelease-1>", self.change_size)

        self.list_weight = Listbox(self.t_font, selectmode=BROWSE, listvariable=list_var_weight, exportselection=0)
        self.list_weight.grid(row=1, column=6, padx=4)
        list_weight_item = ["bold", "normal"]
        for item in list_weight_item:
            self.list_weight.insert(0, item)
        self.list_weight.bind("<ButtonRelease-1>", self.change_weight)

        self.labFra_display = LabelFrame(self.t_font, text="字体样式演示区域")
        self.labFra_display.grid(row=2, column=0, pady=4)
        self.lab_display = Label(self.labFra_display, text="我在这里")
        self.lab_display.pack()

        self.btn_ok = Button(self.t_font, text="确定", width=10, height=2, command=self.change)
        self.btn_ok.grid(row=2, column=2, pady=4)
        self.btn_cancel = Button(self.t_font, width=10, height=2, text="取消", command=self.exit_subwindow)
        self.btn_cancel.grid(row=2, column=4, pady=4)

    def change_size(self, event):
        tk.customFont = font.Font(family="Helvetica", size=12, weight="normal", slant="roman", underline=0)
        size = tk.customFont["size"]
        tk.customFont.configure(size=self.list_size.get(self.list_size.curselection()))
        self.st.config(font=tk.customFont)
        self.size_count = 1
        pass

    def change_font(self, event):
        tk.customFont = font.Font(family="Helvetica", size=12, weight="normal", slant="roman", underline=0)
        family = tk.customFont["family"]
        tk.customFont.configure(family=self.list_font.get(self.list_font.curselection()))
        self.st.config(font=tk.customFont)
        self.font_count = 1
        pass

    def change_shape(self, event):
        tk.customFont = font.Font(family="Helvetica", size=12, weight="normal", slant="roman", underline=0)
        slant = tk.customFont["slant"]
        tk.customFont.configure(slant=self.list_shape.get(self.list_shape.curselection()))
        self.st.config(font=tk.customFont)
        self.shape_count = 1
        pass

    def change_weight(self, event):
        tk.customFont = font.Font(family="Helvetica", size=12, weight="normal", slant="roman", underline=0)
        weight = tk.customFont["weight"]
        tk.customFont.configure(weight=self.list_weight.get(self.list_weight.curselection()))
        self.st.config(font=tk.customFont)
        self.shape_count = 1

    def change(self, event):
        pass
        # self.st["font"] = (self.list_size.get(self.list_size.curselection()))
        # self.st["font"] = (self.list_font.get(self.list_font.curselection()))
        # self.st["font"] = (self.list_shape.get(self.list_shape.curselection()))

    def exit_subwindow(self):
        self.t_font.destroy()


if __name__ == "__main__":
    root = None
    t1.append(editor(root))
    root = t1[0].t
    root.mainloop()

花钱买的 感觉有点不值 免费分享

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

难得糊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值