Tkinter notebook多页Entry组件输入内容自动同步到其他页Entry问题求助
Tkinter ttk.Notebook多页面Entry内容同步问题解决
问题根因
你代码里的核心问题出在Entry组件的参数使用错误:
- Tkinter的Entry组件本身没有
text构造参数,你传入的text="Window "+str(j+1)会被识别为textvariable参数的字符串变量名,所有同一j序号的Entry会被绑定到同名的全局Tk字符串变量,修改任意一个都会同步更新所有绑定了该变量的Entry。 - 其次Entry的父容器指定为根窗口
app也不符合组件层级逻辑,应该归属到对应分页的画布容器下。
修复方案
修改两个细节即可:
- 将Entry的父容器替换为当前分页的
canvas_left[i] - 移除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
相关产品推荐
相关产品推荐

