2015-12-09 3 views
0

Я пытаюсь создать функцию проверки, которая имеет условия ее числа и больше нуля. Я могу сделать это в python, но теперь я пытаюсь использовать поля ввода в tkinter, кажется, сложнее. Я включил код, который у меня есть.Проверка при вводе текста

from tkinter import * 


class quote(): 
def __init__(self, master): 

    self.master=master 

    self.master.title("Quote Screen") 
    self.master.geometry("2100x1400") 

    self.master.configure(background = "white") 
    self.Borras = PhotoImage(file = "Borras.Logo.2.gif") #sets up image 
    self.Borras.image = self.Borras 
    self.BorrasLabel = Label(self.master, image = self.Borras, bg = "white")#puts image onto label 
    self.BorrasLabel.place(anchor=NW) 

    self.Title = Label(self.master, text = "New Quote", font = ("calibri", 20), bg = "White") 
    self.Title.place(x=650, y = 10) 

    self.SubmitButton = PhotoImage(file = "Submit.Button.gif") #sets up image 
    self.SubmitButton.image = self.SubmitButton 
    self.SubmitButtonLabel = Button(self.master, image = self.SubmitButton, bg = "white", command= self.Validation)#puts image onto a button 
    self.SubmitButtonLabel.place(x=900, y=290) 

    global PostCodeValue 
    global HeightValue 
    global LengthValue 
    global PitchValue 
    global RiseValue 

    PostCodeVar = StringVar() 
    PostCodeEntry = Entry(master,width=50, font=20, textvariable=PostCodeVar) 
    PostCodeEntry.place(x = 20, y = 150) 
    PostCodeVar.set("Please enter the Post Code") 
    PostCodeValue = PostCodeVar.get() 

    HeightVar = StringVar() 
    HeightEntry = Entry(master, width=50, font=20, textvariable=HeightVar) 
    HeightEntry.place(x = 20, y = 220) 
    HeightVar.set("Please enter the Height") 
    HeightValue = HeightVar.get() 

    LengthVar = StringVar() 
    LengthEntry = int(Entry(master, width=50, font=20, textvariable=LengthVar)) 
    LengthEntry.place(x = 20, y = 290) 
    LengthVar.set("Please enter the Length") 
    LengthValue = LengthVar.get() 

    PitchVar = StringVar() 
    PitchEntry = Entry(master, width=50, font=20, textvariable=PitchVar) 
    PitchEntry.place(x = 20, y = 360) 
    PitchVar.set("Please enter the Pitch") 
    PitchValue = PitchVar.get() 

    RiseVar = StringVar() 
    RiseEntry = Entry(master, width=50, font=20, textvariable=RiseVar) 
    RiseEntry.place(x = 20, y = 430) 
    RiseVar.set("Please enter the Rise") 
    RiseValue = RiseVar.get() 



def Validation(self): 
    if LengthValue > 0 and LengthValue.isdigit(): 
     print('well done') 
    else: 
     print('Error') 
+0

Как этот вопрос отличается от другого вопроса, который вы задали для проверки? –

+0

Здесь я ищу, как проверить данные, например, чтобы убедиться, что это целое число от 0 до 360. –

ответ

0

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

try: 
    pitch = int(PitchVar.get()) 
    print("it is an integer") 
except ValueError: 
    print("it is NOT an integer") 

После преобразования, вы можете просто сравнить его с диапазоном чисел вас» заинтересованы в:

try: 
    pitch = int(PitchVar.get()) 
    if pitch < 0 or pitch > 360: 
     print("Not between 0 and 360") 
except ValueError: 
    print("it is NOT an integer") 

примечание: вам не нужно использовать эти специальные переменные (PitchVar, PostCodevar и т. Д.). Вы можете получить значение из въездного виджета с помощью вызова метода get самого виджета, и поместить значения в элементе виджет с set():

PitchEntry = Entry(...) 
PitchEntry.insert(0, "Please enter the Pitch") 

pitch = int(PitchEntry.get()) 
0

Если вы не хотите использовать try/except вы можете воспользоваться о том, как python обрабатывает операторы if и использует что-то подобное.

def Validation(self): 
    if LengthVar.get().isdigit() and 0 < int(LengthVar.get()) < 360: 
     print('Well Done') 
    else: 
     print('Error') 

Здесь Python сначала проверяет, если LengthValue это цифра. Если true, то оно переходит в следующее условие. Если false, он остановится и перейдет к другому.

Другой вариант метода try/except, предложенный Брайаном, можно утверждать, что значение находится между 0 и 360. Таким образом, вы можете сделать что-то еще в этом случае.

def Validation(self): 
    try: 
     pitch = int(PitchVar.get()) 
     assert 0 < pitch < 360 # if value is not between 0 and 360 AssertionError is raised 
    except ValueError: 
     print("it is NOT an integer") 
    except AssertionError: 
     print("Not between 0 and 360") 

Side Примечания

Имея это назначение в вашей __init__ функции, LengthValue всегда будет начальное значение.

LengthValue = LengthVar.get() 

В вашем случае это LengthVar.set("Please enter the Length"). Вы всегда должны получать значение, когда вам нужно его использовать, поэтому это текущее значение.

Сказав это. Единственный виджет, которому требуется назначенная переменная, - это виджет OptionMenu. все остальное вы можете получить значение в виде строки, используя Widget.get(). Который выглядит как LengthEntry.get()

Смежные вопросы