鱼C论坛

 找回密码
 立即注册
查看: 1215|回复: 3

[已解决]关于tkinter模块的entry组件相关问题

[复制链接]
发表于 2020-8-21 16:38:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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()
最佳答案
2020-8-21 16:47:53
本帖最后由 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-21 16:47:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-21 16:52:03 | 显示全部楼层
Twilight6 发表于 2020-8-21 16:47
改成这样就行,因为验证函数 p.isdigit() 必须要是纯数字字符串,而你删全空了是空字符串

isdigit 返 ...

感谢帮忙~

点评

客气了~  发表于 2020-8-21 16:54
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 08:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表