鱼C论坛

 找回密码
 立即注册
查看: 892|回复: 7

[已解决]tkinter内的无法删除

[复制链接]
发表于 2023-8-28 20:14:24 | 显示全部楼层 |阅读模式

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

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

x
from tkinter import *
list1 = ['+','-','*','/']
root = Tk()
frame = Frame(root,padx = 10, pady = 10)
frame.pack(padx = 10,pady = 10)
v1 = IntVar()
v2 = IntVar()
v3 = IntVar()
v_fuhao = StringVar()
def check_is_num(content):
    if content.isdigit():
        return True
    else:
        return False
#开始搞加减乘除和计算的函数:
def add():
    v_fuhao.set(list1[0])

def jian():
    v_fuhao.set(list1[1])

def cheng():
    v_fuhao.set(list1[2])

def chu():
    v_fuhao.set(list1[3])
def calc():
    if  v_fuhao.get() == "+":
        v3.set(int(v1.get()) + int(v2.get()))
    elif  v_fuhao.get() == "-":
        v3.set(int(v1.get()) - int(v2.get()))
    elif  v_fuhao.get() == "*":
        v3.set(int(v1.get()) * int(v2.get()))
    elif  v_fuhao.get() == "/":
        v3.set(int(v1.get()) / int(v2.get()))


# 开始封装函数:
check_is_num = root.register(check_is_num)

#开始设置entry 与 label
entry1 = Entry(frame,textvariable = v1,validate = 'key',validatecommand = (check_is_num,"%P"),\
    width = 10)
entry1.grid()
label1 = Label(frame,textvariable = v_fuhao,width = 5)
label1.grid(row = 0, column = 1)
entry2 = Entry(frame,textvariable = v2,validate = 'key',validatecommand = (check_is_num,"%P"),\
    width = 10)
entry2.grid(row = 0, column = 2,padx = 50)
label2 = Label(frame,text = "=")
label2.grid(row = 0, column = 3)
entry3 = Entry(frame,textvariable = v3,validate = 'key',validatecommand = (check_is_num,"%P"),\
    width = 10,state = 'readonly')
entry3.grid(row = 0,column = 4)

#开始设置button:
button1 =Button(frame,text = list1[0],command = add,width = 10)
button2 =Button(frame,text = list1[1],command = jian,width = 10)
button3 =Button(frame,text = list1[2],command = cheng,width = 10)
button4 =Button(frame,text = list1[3],command = chu,width= 10)
button_calc = Button(frame,text = "计算结果",command = calc, width = 10)
button1.grid(row = 1, column = 0)
button2.grid(row = 1, column = 1)
button3.grid(row = 2, column = 0)
button4.grid(row = 2, column = 1)
button_calc.grid(row = 2, column = 4,sticky = 'w',pady = 10)


   
mainloop()
屏幕截图 2023-08-28 201139.png
为什么显示框内出现的零无法被删除(用Backsapce没用/(ㄒoㄒ)/~~)
最佳答案
2023-8-28 21:11:03
验证问题,自己慢慢研究。
def check_is_num(content):
    if content=='' or content.isdigit():
        return True
    else:
        return False

当你删到最前一位时,就为空了,为空不会通过验证。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-28 20:14:35 | 显示全部楼层
tkinter中的无法删除零的问题

问题出现在以下代码行:
entry3 = Entry(frame, textvariable=v3, validate='key', validatecommand=(check_is_num, "%P"), width=10, state='readonly')
entry3 是一个 Entry 组件,通过设置 textvariable=v3,它与 v3 变量绑定。然而,你将 entry3 的状态设置为 'readonly',这意味着用户无法编辑或删除其中的文本。

要解决这个问题,可以将 entry3 组件的状态更改为可编辑状态。只需将 state 属性设置为 'normal' 即可。修改后的代码如下:
entry3 = Entry(frame, textvariable=v3, validate='key', validatecommand=(check_is_num, "%P"), width=10, state='normal')
这样,用户将能够在 entry3 中编辑并删除零。

希望我的回答能够帮到你!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-28 20:15:28 | 显示全部楼层
问题出在使用了 state='readonly' 属性来设置 entry3 为只读状态。当 entry3 处于只读状态时,用户无法通过键盘输入来修改其中的内容,包括删除已有的内容。

要解决这个问题,你可以将 entry3 的 state 属性设置为默认值 state='normal' ,这样用户就可以通过Backspace键删除 entry3 中的内容了。

修改代码如下:
entry3 = Entry(frame, textvariable=v3, validate='key', validatecommand=(check_is_num, "%P"), width=10, state='normal')

请注意,修改后的代码只会解决删除问题,但是用户仍然无法手动修改 entry3 中的内容,因为它仍然是只读的。如果你希望用户能够手动修改结果,你可以将 entry3 的 state 属性设置为 'normal' 。

希望能帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-28 20:19:48 | 显示全部楼层
Mike_python小 发表于 2023-8-28 20:14
tkinter中的无法删除零的问题

问题出现在以下代码行:

entry2与entry1都没设置state= 'readonly',但为什么也不可删除
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-28 21:00:49 | 显示全部楼层
davidmou 发表于 2023-8-28 20:19
entry2与entry1都没设置state= 'readonly',但为什么也不可删除

因为楼上2位都是机器人。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-28 21:11:03 | 显示全部楼层    本楼为最佳答案   
验证问题,自己慢慢研究。
def check_is_num(content):
    if content=='' or content.isdigit():
        return True
    else:
        return False

当你删到最前一位时,就为空了,为空不会通过验证。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-28 21:20:01 | 显示全部楼层
ba21 发表于 2023-8-28 21:11
验证问题,自己慢慢研究。
def check_is_num(content):
    if content=='' or content.isdigit():

还是真人好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-28 21:21:47 | 显示全部楼层

你都没问我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 15:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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