Я хочу показать сообщение об ошибке записи в Python, но это не похоже на работу - PullRequest
0 голосов
/ 01 ноября 2018

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

    import tkinter as tk
    from tkinter import ttk
    from tkinter.constants import *
    from tkinter import messagebox

    root=tk.Tk()
    root.title("Date converter")

    gy=tk.IntVar()
    jy=tk.IntVar()


    def cj():
        if jy.get() <1000 :
            messagebox.showerror("ERROR", "Entry of year must be upper than oneThousand (1000) !")
        else:   
            Answerj.configure(text=jy.get())

    def cg():
        if gy.get()<1000:
            messagebox.showerror("ERROR", "Entry of year must be upper than oneThousand (1000) !")
        else:
            Answerg.configure(text=gy.get())


    def justint(inStr,acttyp):
        if acttyp == '1': 
            if not inStr.isdigit():
                return False
        return True

    entryjy=ttk.Entry(root , width=6 , validate="key", textvariable=jy)
    entryjy['validatecommand'] = (entryjy.register(justint),'%P','%d')
    entryjy.delete(0, END)
    entryjy.grid(row=0 , column=0)

    entrygy=ttk.Entry(root , width=6 , validate="key", textvariable=gy)
    entrygy['validatecommand'] = (entrygy.register(justint),'%P','%d')
    entrygy.delete(0, END)
    entrygy.grid(row=1 , column=0)

    Answerj=ttk.Button(root,text=" ",state=DISABLED,style='my.TButton')
    Answerj.grid(row=0,column=2)

    Answerg=ttk.Button(root,text=" ",state=DISABLED,width=10,style='my.TButton')
    Answerg.grid(row=1,column=2 )

    buttong=ttk.Button(root,text="calculate",command=cg,width=10,style='my.TButton')
    buttong.grid(column=1,row=0)

    buttonj=ttk.Button(root,text="calculate",command=cj,style='my.TButton')
    buttonj.grid(column=1,row=1)


    root.mainloop()

К сожалению, это ошибка, которую я получаю:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Hadi\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 505, in get
    return self._tk.getint(value)
_tkinter.TclError: expected integer but got ""

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Hadi\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1702, in call
    return self.func(*args)
  File "D:\python\soal_az_stack.py", line 20, in cg
    if gy.get()<1000:
  File "C:\Users\Hadi\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 507, in get
    return int(self._tk.getdouble(value))
_tkinter.TclError: expected floating-point number but got ""

Если бы вы могли сказать, в чем проблема, я был бы очень признателен!

1 Ответ

0 голосов
/ 01 ноября 2018

Сначала необходимо проверить, что поле содержит действительное число вместо пустого числа.

Один из способов справиться с этим - оператор try/except, который будет проверять вашу функцию, а в случае сбоя выдает какое-то сообщение об ошибке.

Измените cj() и cg() на это:

def cj():
    try:
        if jy.get() < 1000:
            messagebox.showerror("ERROR", "Entry of year must be upper than oneThousand (1000) !")
        else:   
            Answerj.configure(text=jy.get())
    except:
        messagebox.showerror("ERROR", "Entry field does not contain a valid number!")

def cg():
    try:
        if gy.get() < 1000:
            messagebox.showerror("ERROR", "Entry of year must be upper than oneThousand (1000) !")
        else:
            Answerg.configure(text=gy.get())
    except:
        messagebox.showerror("ERROR", "Entry field does not contain a valid number!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...