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

时间:2015-02-05 05:21:23

标签: python tkinter

如果此输入框为空,我试图将文本框或EntryBox设置为0 如果entrybox的textvariable是一个String,我可以这样做,但我不能,如果是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: 

1 个答案:

答案 0 :(得分:1)

无论如何,我修复了你的代码,所以如果我理解你的话它会正常工作。主要部分是将您的if语句更改为tryexcept语句。原因是如果DoubleVar无法获得双精度值,ValueError会通过mButtonLoad异常。例如,当Entry为空或是字符串时。你的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() 来检查它。

{{1}}