Tkinter Entry validatecommand иtrace_add для числа с плавающей запятой, которое допускает пустой ввод и запускает функциPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Tkinter Entry validatecommand иtrace_add для числа с плавающей запятой, которое допускает пустой ввод и запускает функци

Сообщение Anonymous »

Введите или вставьте в tk.Entry только число с плавающей точкой, за исключением пустого поля, а затем инициируйте действие, которое передает обновленное значение. Это должно быть обобщаемым.

Код: Выделить всё

import tkinter as tk

def float_validation(inStr,acttyp): #check for float
if acttyp == '1':
try:
float(inStr)
return True
except ValueError:
return False
#Do NOT evaluate actype == '0' (delete action)
#Using acttype == '0', try:float("") returns False
return True

def update_from_entry(entry): #address empty string after float validation
if not entry.get() == "":
vals[strs.index(entry)].set(float(entry.get()))
else:
vals[strs.index(entry)].set(0)

def calculate(entry): #do something after entry update
update_from_entry(entry)
calculated_value.set(entry1_val.get()+entry2_val.get())

root = tk.Tk()
strs = [] #create lists of objects to index against each other
vals = []

entry1_str = tk.StringVar(value='0.123')
strs.append(entry1_str)
entry1_str.trace_add('write',lambda a,b,c, entry=entry1_str: calculate(entry))
entry1_input = tk.Entry(root, textvariable=entry1_str, validate='all')
entry1_input.grid(row=0,sticky='ew')
entry1_input['validatecommand'] = entry1_input.register(float_validation),'%P','%d'
entry1_val = tk.DoubleVar(value = float(entry1_str.get()))
vals.append(entry1_val)

entry2_str = tk.StringVar(value='0.456')
strs.append(entry2_str)
entry2_str.trace_add('write',lambda a,b,c,entry=entry2_str:calculate(entry))
entry2_input = tk.Entry(root, textvariable=entry2_str, validate='all')
entry2_input.grid(row=1,sticky='ew')
entry2_input['validatecommand'] = entry1_input.register(float_validation),'%P','%d'
entry2_val = tk.DoubleVar(value = float(entry2_str.get()))
vals.append(entry2_val)

calculated_value = tk.DoubleVar(value=entry1_val.get()+entry2_val.get())
output = tk.Label(root, textvariable=calculated_value).grid(row=2,sticky='ew')

root.mainloop()
Код работает, но не слишком ли он надуман? Разумный ли это способ ограничить tk.Entry числом с плавающей запятой, введя дополнительные шаги для адресации пустой проверки tk.Entry False из float("") , при запуске обновлений? Я неправильно понял, как разрешить пустые (и/или вставки) объекты tk.Entry?


Подробнее здесь: https://stackoverflow.com/questions/790 ... -empty-inp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»