tkinter 设置不可编辑_tkinter实现简易记事本

这篇博客通过实例展示了如何使用Python的tkinter库创建一个简易记事本,包括页面布局、文本编辑功能(增删改查)、大小写转换、文件操作(新建、打开、保存/另存为、清空)等功能。通过MainWindow类实现了界面设计。
摘要由CSDN通过智能技术生成

这次我们用一个实例来加深对于tkinter控件布局,以及Text控件的理解。

实现简易记事本

要实现的功能有:

1)页面布局

2)基本文本编辑功能,增删改查替

3)大小写切换

4)新建

5)打开

6)保存/另存为

7)清空

设计一个MainWindow类,来实现tkinter界面,具体思路很简单,所以我们直接来看代码:

from tkinter import *  # 控件基础包,导入这个包后,这个包下的所有函数可以直接调用
from tkinter import filedialog, messagebox
from tkinter.ttk import Combobox
from urllib.parse import quote

class MainWindow():
    # 初始化
    def __init__(self):
        top_button_width = 10 #用于设置按钮宽度
        button_relief = RAISED #用于设置图标效果,这里设为凸起

        # 创建顶层窗口
        root = Tk()
        self.src_filename = None
        self.count = StringVar()
        self.count.set('0')
        root.title('本地记事本')
        # 宽、高设为不可变,默认为True
        root.resizable(width=False, height=False)

        # 上部控件
        Button(root, text='打开', relief=button_relief, width=top_button_width, command=self.open_button_event).grid(row=0, column=0)
        Button(root, text='新建', relief=button_relief, width=top_button_width, command=self.new_button_event).grid(row=0, column=1)
        Button(root, text='保存', relief=button_relief, width=top_button_width,
               command=self.save_button_event).grid(row=0, column=3)
        Button(root, text='另存为', relief=button_relief, width=top_button_width,
               command=self.other_save_button_event).grid(row=0, column=4)
        Button(root, text='清空', width=top_button_width, command=self.clear_button).grid(row=0, column=5)

        # 空一行
        Label(root, text='').grid(row=1)

        # 左侧控件
        Button(root, text='查找', relief=button_relief, width=top_button_width, command=self.find_button_event) 
            .grid(row=2, column=0, sticky=N)
        self.find_text = Text(root, width=top_button_width, height=2)
        self.find_text.grid(row=2, column=1)
        Label(root, text='查找总数').grid(row=3, column=0, sticky=N)
        self.count_label = Label(root, textvariable=self.count)
        self.count_label.grid(row=3, column=1)
        Button(root, text='替换成', relief=button_relief, width=top_button_width, command=self.replace_button_event).grid(
            row=4, column=0, sticky=N)
        self.replace_text = Text(root, width=top_button_width, height=2)
        self.replace_text.grid(row=4, column=1, sticky=N)
        Button(root, text='大写', relief=button_relief, width=top_button_width, command=self.upper_button_event).grid(
            row=5, column=0, sticky=N)
        Button(root, text='小写', relief=button_relief, width=top_button_width, command=self.lower_button_event).grid(
            row=5, column=1, sticky=N)
        #右侧文本框
        self.text = Text(root)
        self.text.grid(row=2, column=2, columnspan=6, rowspan=15)
    #打开
    def open_button_event(self):
        self.new_button_event()
        # 获取文件名
        self.src_filename = filedialog.askopenfilename(filetypes=[('txt格式', 'txt')])
        if self.src_filename:
            # 获取数据
            data = open(self.src_filename).read()
            # 填充到text控件
            #self.text.delete(1.0, END)
            self.text.insert(INSERT, data)
    #新建
    def new_button_event(self):
        data = self.__get()
        if data and messagebox.askokcancel('提示', '当前内容要进行保存吗?'):
            if self.src_filename:
                self.__sava_data(self.src_filename)
            else:
                self.other_save_button_event()
        self.text.delete(1.0, END)
    #保存按钮
    def save_button_event(self):
        filename = self.src_filename if self.src_filename else filedialog.askopenfilename(filetypes=[('txt格式', 'txt')])
        if filename:
            self.__sava_data(filename)
    #另存为
    def other_save_button_event(self):
        f = filedialog.asksaveasfile(filetypes=[('txt格式', 'txt')])
        if f:
            f.write(self.__get())
    #查找
    def find_button_event(self):
        data = self.__get()
        find_data = self.find_text.get(1.0, END).strip()
        if find_data not in data:
            messagebox.showinfo('提示', '搜索的字符不存在')
        else:
            self.count.set(str(data.count(find_data)))
    #替换
    def replace_button_event(self):
        find_data = self.find_text.get(1.0, END).strip()
        replace_data = self.replace_text.get(1.0, END).strip()
        data = self.__get()
        data = data.replace(find_data, replace_data)
        self.__del_and_set(data)
    #大写
    def upper_button_event(self):
        data = self.__get().upper()
        self.__del_and_set(data)
    #小写
    def lower_button_event(self):
        data = self.__get().lower()
        self.__del_and_set(data)
    #清空
    def clear_button(self):
        self.text.delete(1.0, END)
    #保存文件
    def __sava_data(self, filename):
        with open(filename, 'w') as f:
            f.write(self.__get())
        messagebox.showinfo('提示', '保存成功')
    #获取文本
    def __get(self):
        # 这里一定要有strip
        return self.text.get(1.0, END).strip()
    #更新
    def __del_and_set(self, data):
        self.text.delete(1.0, END)
        self.text.insert(INSERT, data)

main = MainWindow()
mainloop()  

界面效果如下:

b9ec939f7cd9b56934609cc0a6b55a65.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值