Ошибки Python и исключения с TkInter - PullRequest
0 голосов
/ 21 мая 2019

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

Я работаю с методом try и except, и моя проблема в том, что код, который тестируется методом try-не выполняется, а проверяется на ValueErrors.

Есть ли способ выполнить код между попыткой и исключением?

Спасибо

from Tkinter import *

root = Tk()

class MyOwnEntry:

    def __init__(self):
        self.variable = StringVar()
        self.variable.trace("w", self.Validation)
        self.MyOwnEntry = Entry(root, textvariable = self.variable)
        self.MyOwnEntry.pack()

    def Validation(self,*args):
        self.newvar = self.variable.get()
        try:
            if isinstance(float(self.newvar),float): 
                return self.newvar
            elif float(self.newvar)<1000:
                self.newvar = self.newvar[:-1]
                self.variable.set(self.newvar)
            else:
                self.newvar = self.newvar[:-1]
                self.variable.set(self.newvar)
        except ValueError:
            self.newvar = self.newvar[:-1]
            self.variable.set(self.newvar)




Input1 = MyOwnEntry()


root.mainloop()

Ответы [ 3 ]

1 голос
/ 21 мая 2019

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

Возможно, вам не нужно первое условие, если это ^ то, что вы хотите, потому что онопросто возвращает self.newvar, если значение равно float, но вам также нужно проверить, меньше ли оно 1000

    def Validation(self, *args):
        self.newvar = self.variable.get()
        try:
            if isinstance(self.newvar,float) and self.newvar < 1000:
                self.newvar = self.newvar[:-1]
                self.variable.set(self.newvar)
            else:
                self.newvar = self.newvar[:-1]
                self.variable.set(self.newvar)
        except ValueError:
            self.newvar = self.newvar[:-1]
            self.variable.set(self.newvar)
0 голосов
/ 21 мая 2019

Спасибо, Амир, эта версия хорошо работает для меня

class MyOwnEntry:

    def __init__(self):
        self.variable = StringVar()
        self.variable.trace("w", self.Validation)
        self.MyOwnEntry = Entry(root, textvariable = self.variable)
        self.MyOwnEntry.pack()

    def Validation(self, *args):
        self.newvar = self.variable.get()
        try:
            if float(self.newvar) < 1000:
                return self.newvar
            else:
                self.newvar = self.newvar[:-1]
                self.variable.set(self.newvar)
        except ValueError:
            self.newvar = self.newvar[:-1]
            self.variable.set(self.newvar)
0 голосов
/ 21 мая 2019

Если вы используете self.newvar [: - 1] и курсор не находится в конце, ваша последняя цифра будет удалена.

from Tkinter import *

root = Tk()

class MyOwnEntry:

    def __init__(self):
        self.variable = StringVar()
        self.variable.trace("w", self.Validation)
        self.MyOwnEntry = Entry(root, textvariable = self.variable)
        self.MyOwnEntry.pack()
        self.oldvar=0

    def isfloat(self,value):
      try:
        float(value)
        return True
      except ValueError:
        return False

    def Validation(self,*args):
        self.newvar = self.variable.get()
        if self.newvar:
            if not (self.isfloat(self.newvar) and float(self.newvar)<1000):
                self.newvar = self.oldvar
                self.variable.set(self.newvar)
            self.oldvar=self.newvar


Input1 = MyOwnEntry()


root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...