You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取ttk.Notebook激活标签对应Text组件的文本内容

问题核心原因

你现有代码的问题是循环创建Text组件时,每次都会覆盖self.text变量,导致该变量最终只指向最后一个标签页的Text组件,无法关联每个标签页对应的Text实例。

解决方案

以下提供两种可直接落地的实现方式:

方案1:建立标签页与Text组件的映射字典(推荐,可维护性更高)

步骤1:修改初始化代码,新增映射存储

在创建ttk.Notebook前先初始化一个字典用于存储对应关系,循环创建组件时把每个标签页的Frame和对应的Text组件绑定:

import os
import glob
import tkinter as tk
from tkinter import ttk

# ... 你的类初始化其他代码 ...
os.chdir('C://Users//Public//Documents')
myNotes = glob.glob('*.txt')
myNotes.append('+')

self.notebook = ttk.Notebook(self.master)
self.tab_text_map = {} # 新增:存储标签页Frame和对应Text组件的映射
for files in myNotes:
    if files != '+':
        with open('C://Users//Public//Documents//'+files,'r') as f:
            value = f.read()
    else:
        value=''
    notebook_tab = ttk.Frame(self.notebook)
    self.notebook.add(notebook_tab, text=files)
    text_widget = tk.Text(notebook_tab, bd=0, wrap='word')
    text_widget.pack(fill='both', expand=True)
    text_widget.insert('1.0', value)
    self.tab_text_map[notebook_tab] = text_widget # 新增:写入映射关系
self.notebook.pack(fill='both', expand=True)

步骤2:获取当前激活标签的文本内容并保存

需要保存时执行以下逻辑即可:

# 获取当前激活的标签页
current_tab = self.notebook.select()
# 获取对应Text组件
current_text = self.tab_text_map[current_tab]
# 获取Text内的全部内容,end-1c用于去掉Text组件默认末尾添加的多余换行
content = current_text.get('1.0', 'end-1c')
# 获取当前标签对应的文件名
active_tab_name = self.notebook.tab(current_tab, "text")

# 保存逻辑,排除+号标签的话可以加判断
if active_tab_name != '+':
    with open(f'C://Users//Public//Documents//{active_tab_name}', 'w', encoding='utf-8') as f:
        f.write(content)

方案2:直接从标签页子组件获取Text(无需修改原有初始化代码)

如果不想改动原有初始化逻辑,可以直接通过标签页Frame的子组件查找Text,因为每个标签页下只有Text一个子组件:

current_tab = self.notebook.select()
# 取当前标签页的第一个子组件,就是对应的Text对象
current_text = current_tab.winfo_children()[0]
content = current_text.get('1.0', 'end-1c')
# 后续保存逻辑和方案1完全一致

补充说明

如果你的+号标签需要支持新建文件保存,可以额外加逻辑判断,当标签名是+时弹出输入框让用户输入新文件名,再写入对应文件即可。

内容的提问来源于stack exchange,提问作者Guinness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:45:03