davidmou 发表于 2023-8-28 20:14:24

tkinter内的无法删除

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)

def jian():
    v_fuhao.set(list1)

def cheng():
    v_fuhao.set(list1)

def chu():
    v_fuhao.set(list1)
def calc():
    ifv_fuhao.get() == "+":
      v3.set(int(v1.get()) + int(v2.get()))
    elifv_fuhao.get() == "-":
      v3.set(int(v1.get()) - int(v2.get()))
    elifv_fuhao.get() == "*":
      v3.set(int(v1.get()) * int(v2.get()))
    elifv_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,command = add,width = 10)
button2 =Button(frame,text = list1,command = jian,width = 10)
button3 =Button(frame,text = list1,command = cheng,width = 10)
button4 =Button(frame,text = list1,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()

为什么显示框内出现的零无法被删除(用Backsapce没用/(ㄒoㄒ)/~~)

Mike_python小 发表于 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 中编辑并删除零。

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 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' 。

希望能帮到你!

davidmou 发表于 2023-8-28 20:19:48

Mike_python小 发表于 2023-8-28 20:14
tkinter中的无法删除零的问题

问题出现在以下代码行:

entry2与entry1都没设置state= 'readonly',但为什么也不可删除

ba21 发表于 2023-8-28 21:00:49

davidmou 发表于 2023-8-28 20:19
entry2与entry1都没设置state= 'readonly',但为什么也不可删除

因为楼上2位都是机器人。{:5_109:}

ba21 发表于 2023-8-28 21:11:03

验证问题,自己慢慢研究。
def check_is_num(content):
    if content=='' or content.isdigit():
      return True
    else:
      return False

当你删到最前一位时,就为空了,为空不会通过验证。

davidmou 发表于 2023-8-28 21:20:01

ba21 发表于 2023-8-28 21:11
验证问题,自己慢慢研究。
def check_is_num(content):
    if content=='' or content.isdigit():


还是真人好{:9_228:}

isdkz 发表于 2023-8-28 21:21:47

davidmou 发表于 2023-8-28 21:20
还是真人好

你都没问我{:10_277:}
页: [1]
查看完整版本: tkinter内的无法删除