2015-01-21 4 views
0

Я вызываю свою функцию mTime для получения значений из 4 Entryboxes, чтобы проверить время, если есть значение, которое мой код работает без проблем но если ящик ввода пуст, как «', я имею в виду, что пользователь удаляет значения по умолчанию во входных ящиках, которые являются« 0 ». и оставить его пустым. Я хочу присвоить значение «0», если это произойдетValueError: недействительный литерал для int() с базой 10: '' python 3.4 tkinter

но это не работает!

мой код

def mTime(): 
    if (len(str(Days_T.get())) == 0): 
    dd = Days_T.set(0) 
    else: 
    dd = Days_T.get() 
    if (len(str(Hours_T.get())) == 0): 
    hh = Hours_T.set(0) 
    else: 
    hh = Hours_T.get() 
    if (len(str(Minutes_T.get())) == 0): 
    mm = Minutes_T.set(1) 
    else: 
    mm = Minutes_T.get() 
    if (len(str(Seconds_T.get())) == 0): 
    ss = Seconds_T.set(0) 
    else: 
    ss = Seconds_T.get() 
    d = dd 
    h = hh 
    m = mm 
    s = ss 
    print (dd,hh,mm,ss) 

Days_T = IntVar() 
Hours_T = IntVar() 
Minutes_T = IntVar() 
Seconds_T = IntVar() 

TDays = Entry(mGui, textvariable = Days_T, width = 4, justify = CENTER).place(x=520,y=260) 
THours = Entry(mGui, textvariable = Hours_T, width = 4, justify = CENTER).place(x=550,y=260) 
TMinutes = Entry(mGui, textvariable = Minutes_T, width = 4, justify = CENTER).place(x=580,y=260) 
TSeconds = Entry(mGui, textvariable = Seconds_T, width = 4, justify = CENTER).place(x=610,y=260) 

mTime() 

Я получаю эту ошибку

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__ 
    return self.func(*args) 
    File "C:\Users\me\Desktop\Project\ManualTab.py", line 908, in mTime 
    if (len(str(Minutes_T.get())) == 0): 
    File "C:\Python34\lib\tkinter\__init__.py", line 358, in get 
    return getint(self._tk.globalgetvar(self._name)) 
ValueError: invalid literal for int() with base 10: '' 

EDITED

НОВЫЙ КОД

ddays = StringVar() 
    ddays.set(Days_T.get()) 
    hhours = StringVar() 
    hhours.set(Hours_T.get()) 
    mminutes = StringVar() 
    mminutes.set(Minutes_T.get()) 
    sseconds = StringVar() 
    sseconds.set(Seconds_T.get()) 
    if (len(ddays) == 0): 
    dd = Days_T.set(2) 
    else: 
    dd = Days_T.get() 
    if (len(hhours) == 0): 
    hh = Hours_T.set(0) 
    else: 
    hh = Hours_T.get() 
    if (len(mminutes) == 0): 
    mm = Minutes_T.set(0) 
    else: 
    mm = Minutes_T.get() 
    if (len(sseconds) == 0): 
    ss = Seconds_T.set(0) 
    else: 
    ss = Seconds_T.get() 
    d = dd 
    h = hh 
    m = mm 
    s = ss 
    print (dd,hh,mm,ss) 

Days_T = IntVar() 
Hours_T = IntVar() 
Minutes_T = IntVar() 
Seconds_T = IntVar() 

TDays = Entry(mGui, textvariable = Days_T, width = 4, justify = CENTER).place(x=520,y=260) 
THours = Entry(mGui, textvariable = Hours_T, width = 4, justify = CENTER).place(x=550,y=260) 
TMinutes = Entry(mGui, textvariable = Minutes_T, width = 4, justify = CENTER).place(x=580,y=260) 
TSeconds = Entry(mGui, textvariable = Seconds_T, width = 4, justify = CENTER).place(x=610,y=260) 

mTime() 

НО НЕ РАБОТАЕТ

+2

Вы устанавливаете 'textvariable' в' IntVar'. Используйте 'StringVar'. –

+0

@MalikBrahimi действительно добавьте это как ответ. – kartikg3

ответ

0

Я решил эту проблему давно, но никогда не ставил ответ здесь, во всяком случае я попробовать и освобождены, чтобы получить и установить значение этих входных коробок

здесь код

try: 
     Days_T.get() 
    except ValueError: 
     Days_T.set(0) 
     mGui.update() 
    try: 
     Hours_T.get() 
    except ValueError: 
     Hours_T.set(0) 
     mGui.update() 
    try: 
     Minutes_T.get() 
    except ValueError: 
     Minutes_T.set(0) 
     mGui.update() 
    try: 
     Seconds_T.get() 
    except ValueError: 
     Seconds_T.set(0) 
     mGui.update() 
    d = Days_T.get() 
    h = Hours_T.get() 
    m = Minutes_T.get() 
    s = Seconds_T.get() 

то мне не нужно беспокоиться, если поля ввода пустые, он просто назначит 0, если произойдет thay

2

Вы устанавливаете textvariable на номер IntVar. Используйте StringVar.

+0

Как это Хосе? –

+0

это таймер, поэтому номера разрешены здесь не для любого символа, поэтому я использую Int вместо String –

+0

@Jose Звучит так, как будто вы хотите проверить входную информацию. Для получения дополнительной информации об этом вы должны взглянуть на [объяснение Брайана Оукли об этом] (http://stackoverflow.com/a/4140988/3714930), [Техническая страница Нью-Мексико для этого] (http: //infohost.nmt. edu/tcc/help/pubs/tkinter/web/entry-validation.html) и [объяснение и пример effbot] (http://effbot.org/zone/tkinter-entry-validate.htm). – fhdrsdg