Tkinter Text组件输入校验:如何实现用户重输合法数值而不退出程序
问题解决方法
问题根源
你的代码在校验出非法输入弹出警告后,没有终止当前按钮回调函数的执行,因此后续的数值转换、业务逻辑代码仍然会运行,甚至会触发字符串转整数的报错。
修改方案
只需要在校验不通过的分支末尾加return语句,直接终止当前函数执行即可,用户关闭警告弹窗后可以直接修改输入内容,再次点击按钮重新触发校验,无需退出程序。
可选优化:弹出警告后自动选中文本框内的非法内容,方便用户直接修改,无需手动删除原有内容。
核心修改代码
def run_button(): num_of_compare_points= inputtxt2.get('1.0', 'end-1c').strip().replace("\n","") if not (num_of_compare_points.isnumeric()): messagebox.showwarning("警告","请输入合法的分组大小整数值!") # 选中输入框内容,方便用户直接修改 inputtxt2.tag_add(SEL, "1.0", END) inputtxt2.mark_set(INSERT, "1.0") inputtxt2.see(INSERT) # 终止当前函数执行,不再运行后续逻辑 return # 校验通过后才执行后续业务逻辑 print (int(num_of_compare_points)+1)
修改后完整可运行代码
import tkinter from tkinter import * from tkinter import ttk from PIL import ImageTk, Image from tkinter import messagebox import subprocess from tkinter import filedialog window = Tk() window.title("Test") window.geometry('650x400') frame = Frame(window) # 窗口定位 positionRight = 350 positionDown = 100 window.geometry("+{}+{}".format(positionRight, positionDown)) inputtxt2 = Text(window, height = 1, width =24,bg = "light yellow") inputtxt2.pack() inputtxt2.place(x=325, y=108) def run_button(): num_of_compare_points= inputtxt2.get('1.0', 'end-1c').strip().replace("\n","") if not (num_of_compare_points.isnumeric()): messagebox.showwarning("警告","请输入合法的分组大小整数值!") # 自动选中错误内容,方便修改 inputtxt2.tag_add(SEL, "1.0", END) inputtxt2.mark_set(INSERT, "1.0") inputtxt2.see(INSERT) return print (int(num_of_compare_points)+1) runButton = tkinter.Button(window, text ="运行",font = "Times", command = run_button) runButton.pack() runButton.place(x=260, y=320) window.mainloop()
内容的提问来源于stack exchange,提问作者Rawan Ghanem
相关产品推荐
相关产品推荐

