|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 gdmao002 于 2020-8-21 16:41 编辑
视频内容 P68 067GUI的终极选择:Tkinter4
在小甲鱼老师的视频中只是写了12345+54321=66666
然后呢 我写完了之后发现 一旦文本框的内容输入后至少会保留1位还是不可修改的那种
如下图
在图片上第一位数字一旦写完就无法删除,请教下大家这是为何?
或者说有什么办法 让输入的内容可以随意的数字而不是第一位固定不变的!
下面是我的代码
- import tkinter
- root = tkinter.Tk()
- root.title('我的计算')
- root.resizable(0, 0)
- frame = tkinter.Frame(root)
- frame.grid(padx=5, pady=5)
- v1 = tkinter.StringVar()
- v1.set('+')
- v2 = tkinter.StringVar()
- v2.set('=')
- l1 = tkinter.Label(frame, textvariable=v1).grid(row=1, column=2, padx=5, pady=5)
- l2 = tkinter.Label(frame, textvariable=v2).grid(row=1, column=4, padx=5, pady=5)
- def fun1(p):
- return p.isdigit()
- def cal():
- num = int(e1.get()) + int(e2.get())
- v3.set(str(num))
- testCMD = root.register(fun1)
- e1 = tkinter.Entry(frame, width=10, validate='key', validatecommand=(testCMD, '%P'))
- e1.grid(row=1, column=1, padx=5, pady=5)
- e2 = tkinter.Entry(frame, width=10, validate='key', validatecommand=(testCMD, '%P'))
- e2.grid(row=1, column=3, padx=5, pady=5)
- v3 = tkinter.StringVar()
- e3 = tkinter.Entry(frame, textvariable=v3, state='readonly')
- e3.grid(row=1, column=5, padx=5, pady=5)
- tkinter.Button(frame, text='计算结果', command=cal).grid(row=2, column=3, padx=5, pady=5)
- root.mainloop()
复制代码
本帖最后由 Twilight6 于 2020-8-21 16:50 编辑
改成这样就行,因为验证函数 p.isdigit() 必须要是纯数字字符串,而你删全空了是空字符串
isdigit 返回 False 所以无法删除最开始输入的字符
你把 return p.isdigit() 加上 or p == '' ,或者 not p 就行了:
- import tkinter
- root = tkinter.Tk()
- root.title('我的计算')
- root.resizable(0, 0)
- frame = tkinter.Frame(root)
- frame.grid(padx=5, pady=5)
- v1 = tkinter.StringVar()
- v1.set('+')
- v2 = tkinter.StringVar()
- v2.set('=')
- l1 = tkinter.Label(frame, textvariable=v1).grid(row=1, column=2, padx=5, pady=5)
- l2 = tkinter.Label(frame, textvariable=v2).grid(row=1, column=4, padx=5, pady=5)
- def fun1(p):
- return p.isdigit() or p == ''
- def cal():
- num = int(e1.get()) + int(e2.get())
- v3.set(str(num))
- testCMD = root.register(fun1)
- e1 = tkinter.Entry(frame, width=10, validate='key', validatecommand=(testCMD, '%P'))
- e1.grid(row=1, column=1, padx=5, pady=5)
- e2 = tkinter.Entry(frame, width=10, validate='key', validatecommand=(testCMD, '%P'))
- e2.grid(row=1, column=3, padx=5, pady=5)
- v3 = tkinter.StringVar()
- e3 = tkinter.Entry(frame, textvariable=v3, state='readonly')
- e3.grid(row=1, column=5, padx=5, pady=5)
- tkinter.Button(frame, text='计算结果', command=cal).grid(row=2, column=3, padx=5, pady=5)
- root.mainloop()
复制代码
|
|