python tkinter文本编辑器_使用Tkinter Python 3的文本编辑器

这篇博客介绍了一个使用Python的Tkinter库构建的文本编辑器应用。应用包括了新建、打开、保存文件的功能,并通过一个Notebook组件管理多个选项卡。在保存文件时,会获取当前选中的选项卡并保存其内容。博客还提供了详细的代码实现。
摘要由CSDN通过智能技术生成

问题在于您的get_tab方法。它实际上并不返回表示当前打开的选项卡的对象。它返回一个没有内容的新选项卡。在

为了解决您的问题,您需要保留您创建的选项卡的记录。我已经创建了一个“可操作”的版本,它在创建每个选项卡时将其对象添加到列表中。这样,如果您当前在“document3”中并按save,它将获得与document3相关的Tab对象。在from tkinter import *

from tkinter import filedialog, ttk

import os

class App():

def __init__(self):

title = 'New document'

self.root = Tk()

self.root.geometry('300x200')

#self.root.iconbitmap('icon.ico')

self.root.title(title)

self.tabs = {'ky': 0}

#Keep a record of the open tabs in a list.

self.tab_list = []

self.notebook = ttk.Notebook(self.root)

self.notebook.pack(expand = True, fill= 'both')

menubar = Menu(self.root)

# create a pulldown menu, and add it to the menu bar

filemenu = Menu(menubar, tearoff=0)

filemenu.add_command(label="New...", command=self.generate_tab)

filemenu.add_command(label="Open", command = self.open_file)

filemenu.add_command(label="Save", command= self.save_file)

filemenu.add_separator()

filemenu.add_command(label="Exit", command= self.root.quit)

menubar.add_cascade(label="File", menu = filemenu)

editmenu = Menu(menubar, tearoff=0)

editmenu.add_command(label="Undo")

editmenu.add_command(label="Redo")

editmenu.add_separator()

menubar.add_cascade(label="Edit", menu=editmenu)

self.root.config(menu=menubar)

def open_file(self):

file = open(filedialog.askopenfilename(), 'r+')

text_value = file.read()

self.textWidget.delete(1.0, "end-1c")

self.textWidget.insert("end-1c", text_value)

title = os.path.basename(file.name)

self.root.title(title)

file.close()

def add_tab(self, name):

tab = Tab(self.notebook, name)

print(name)

self.notebook.add(tab, text=name)

self.tab_list.append(tab)

def save_file(self):

tab_to_save = self.get_tab()

print(tab_to_save)

tab_to_save.save_tab()

def get_tab(self):

print(self.notebook.index('current'))

#Get the tab object from the tab_list based on the index of the currently selected tab

tab = self.tab_list[self.notebook.index('current')]

return tab

def generate_tab(self):

if self.tabs['ky'] < 20:

self.tabs['ky'] += 1

self.add_tab('Document ' + str(self.tabs['ky']))

def run(self):

self.root.mainloop()

class Tab(Frame):

def __init__(self, root, name):

Frame.__init__(self, root)

self.root = root

self.name = name

self.textWidget = Text(self)

self.textWidget.pack(expand=True, fill='both')

def save_tab(self):

print(self.textWidget.get("1.0", 'end-1c'))

file = open(filedialog.asksaveasfilename() + '.txt', 'w+')

file.write(self.textWidget.get("1.0", 'end-1c'))

print(os.path.basename(file.name))

#title = os.path.basename(file.name)

file.close()

if __name__ == '__main__':

app1 = App()

app1.run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值