tkinter python 3.4 如果 DoubleVar 或 IntVar 为空则设置为零

tkinter python 3.4 set zero if DoubleVar or IntVar is empty

如果此输入框为空,我正在尝试将文本框或输入框设置为 0 如果输入框的文本变量是字符串,我可以做到,但如果是 DoubleVar 或 IntVar

,我就做不到

这是我的代码

mGui = Tk()
mGui.title("GUI")
mGui.geometry('1250x650+10+10')

def mCheck():
  if len(name1.get()) == 0:
    name1.set('noidea')
    mGui.update()
  if (len(name2.get()) == 0):
    name2.set('nofkidea')
    mGui.update()
  if (value1.get()== Empty or (len(str(value2.get()))=0) or (len(str(float(value2.get()))) == 0)):
    name2.set(10)
    mGui.update()
  if (value2.get()== None or (len(str(value2.get()))=0) or (len(str(float(value2.get()))) == 0)):
    name2.set(99999)
    mGui.update()

value1 = DoubleVar()
value2 = DoubleVar()
name1 = StringVar()
name2 = StringVar()
mButtonLoad = Button(mGui, text = "check", command = mCheck, fg = 'Red').place(x=550,y=140)
tText1 = Entry(mGui, textvariable = name1).place(x=10,y=80)
tText2 = Entry(mGui, textvariable = name2).place(x=10,y=100)
vText1 = Entry(mGui, textvariable = value1).place(x=200,y=80)
vText2 = Entry(mGui, textvariable = value2).place(x=200,y=100)

mGui.after(1, mGui.update)
mGui.mainloop()

当我尝试将 DoubleVar 文本框设置为 0(如果这些文本框为空)时出现此错误

ValueError: could not convert string to float: 

无论如何,我修复了你的代码,所以如果我理解正确的话,它可以正常工作。主要部分是将您的 if 语句更改为 tryexcept 语句。原因是 DoubleVar 如果不能得到 double 值将通过 ValueError 异常。例如,当 Entry 为空或为字符串时。另外,您的 mButtonLoad 始终是 None,所以我也修复了它。最后,你不需要检查字符串的长度来知道它是否为空。用not查一下就够了

from tkinter import *


mGui = Tk()
mGui.title("GUI")
mGui.geometry('1250x650+10+10')

def mCheck():

  if not name1.get():
    name1.set('noidea')
    mGui.update()

  if not name2.get():
    name2.set('nofkidea')
    mGui.update()


  try:
      print(value1.get())
  except ValueError as ve:
      name1.set(10)
      mGui.update()
      print(ve)

  try:
      print(value2.get())
  except ValueError as ve:
      name2.set(9999)
      mGui.update()
      print(ve)      


value1 = DoubleVar()
value2 = DoubleVar()

name1 = StringVar()
name2 = StringVar()

mButtonLoad = Button(mGui, text = "check", command = mCheck, fg = 'Red')
mButtonLoad.place(x=550,y=140)

tText1 = Entry(mGui, textvariable = name1).place(x=10,y=80)
tText2 = Entry(mGui, textvariable = name2).place(x=10,y=100)
vText1 = Entry(mGui, textvariable = value1).place(x=200,y=80)
vText2 = Entry(mGui, textvariable = value2).place(x=200,y=100)

mGui.after(1, mGui.update)
mGui.mainloop()