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

Tkinter notebook多页Entry组件输入内容自动同步到其他页Entry问题求助

Tkinter ttk.Notebook多页面Entry内容同步问题解决

问题根因

你代码里的核心问题出在Entry组件的参数使用错误:

  • Tkinter的Entry组件本身没有text构造参数,你传入的text="Window "+str(j+1)会被识别为textvariable参数的字符串变量名,所有同一j序号的Entry会被绑定到同名的全局Tk字符串变量,修改任意一个都会同步更新所有绑定了该变量的Entry。
  • 其次Entry的父容器指定为根窗口app也不符合组件层级逻辑,应该归属到对应分页的画布容器下。

修复方案

修改两个细节即可:

  1. 将Entry的父容器替换为当前分页的canvas_left[i]
  2. 移除Entry构造参数里的text字段,改用insert方法设置初始默认内容

修复后完整代码

import tkinter as tk
from tkinter import ttk
from tkinter import *

app = Tk()
nb = ttk.Notebook(app)

pages = []
canvas_left = []
canvas_right = []
entry_labels = []
entry_values = []

for i in range(3):
    pages.append(ttk.Frame(nb))
    canvas_left.append(tk.Canvas(pages[i], width=500, height=400, bd=0, highlightthickness=0))
    canvas_left[i].pack(side=LEFT)
    entry_values.append([])
    for j in range(8):
            # 修改父容器为当前画布,移除text参数
            entry = Entry(canvas_left[i], width=20, fg="white", bg="gray", font=("Helvetica", 12))
            # 用insert方法设置初始值
            entry.insert(0, "Window "+str(j+1))
            entry_values[i].append(entry)
            canvas_left[i].create_window(125, 20 + j*35, anchor="w", window=entry_values[i][j])
    nb.add(pages[i], text="Display "+(i+1).__str__())
nb.pack(side=TOP)
app.mainloop()

如果后续需要通过代码获取Entry的输入内容,可以为每个Entry单独绑定自定义的StringVar对象,避免变量冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:15:07