Tkinter循环添加y+30位置输入项及防重复点击问题求助
Tkinter输入框动态添加及按钮防重复点击解决方案
修改后的完整代码
import tkinter as tk root = tk.Tk() root.geometry("400x600") # 跟踪下一个输入框的y坐标,初始值设为135 current_y = 135 # 存储当前输入框对象,用于绑定回车事件 current_entry = None def add_withxvariable(): global current_y, current_entry, monday_btn # 点击后立即禁用按钮,防止重复点击 monday_btn.config(state=tk.DISABLED) # 创建新的输入框,用current_y控制位置 subject = tk.Entry(root, width=20) subject.place(x=50, y=current_y) current_entry = subject # 给输入框绑定回车事件,回车后解锁按钮 subject.bind("<Return>", on_enter_pressed) # 更新下一个输入框的y坐标 current_y += 30 def on_enter_pressed(event): global monday_btn # 重新启用按钮,允许添加下一项 monday_btn.config(state=tk.NORMAL) # 可选:把焦点移到按钮上,方便操作 monday_btn.focus_set() # 创建Monday按钮 monday_btn = tk.Button(root, text="Monday", command=add_withxvariable) monday_btn.place(x=50, y=100) root.mainloop()
关键修改说明
解决输入框循环排列问题
- 用全局变量
current_y跟踪下一个输入框的位置,初始值设为你需要的135,每次创建输入框后直接让current_y += 30,这样每一个新输入框都会自动排在前一个下方30像素的位置。 - 放弃用
subject.winfo_y()取坐标的方式,因为第一次创建输入框前这个值不存在,而且直接维护全局变量的坐标值更稳定可靠。
解决按钮重复点击问题
- 点击Monday按钮后,立刻调用
monday_btn.config(state=tk.DISABLED)把按钮设为禁用状态,用户没法再次点击。 - 给每个新生成的输入框绑定回车事件
<Return>,用户按下回车后触发on_enter_pressed函数,在这个函数里重新把按钮设为启用状态(tk.NORMAL),此时才能添加下一个输入项。
内容的提问来源于stack exchange,提问作者Samurai
相关产品推荐
相关产品推荐

