Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/68: Рейтинг темы: голосов - 68, средняя оценка - 4.97
5 / 5 / 1
Регистрация: 19.05.2018
Сообщений: 200

Валидация поля ввода Entry

06.07.2020, 11:27. Показов 14148. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Мне нужно запретить ввод любых символов кроме цифр.
Но такая валидация работает только с нулевым символом в строке и изначально вместо цифр буквы не вводятся. В после хотя бы 1 цифры, становится возможнйм вводить другие символы
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#присвоение переменной для поля ввода
        self.Ed1 = StringVar()
        # регулярное выражение
        regExp = "[^0-9]+"
        #валидация поля
 
            
        def Ed_limit1(Ed1):
            if re.match(regExp, self.Ed1.get()):
                self.Ed1.set("")
                print('o/')
            print(self.Ed1.get())
        self.Ed1.trace("w", lambda *args: Ed_limit1(self.Ed1))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.07.2020, 11:27
Ответы с готовыми решениями:

Len для поля ввода Entry
Дратути господа програмисты. Пишу программу в которой я использую текстовик в нем я записую данные на Разных строчках.Так же я сделал...

Получение числа с поля Entry! Или как вообще получить число введенное пользователем с поля GUI?
Как получить число которое пользователь ввел в поле для ввода в графическом интерфейсе? Например есть простейшая программа (без GUI)для...

Ограничение ввода в entry
Здравствуйте.Можно ли ограничить количество знаков после запятой вводимого в поле Entry числа float? Спасибо.

5
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,648
07.07.2020, 14:24
Python
1
2
3
4
5
6
7
8
9
10
from tkinter import *
root = Tk()
def validate(value, action):
  if action == '1':
     return value.isdigit()
  return True
entry = Entry(root, validate="all")
entry['vcmd'] = (entry.register(validate),'%P','%d')
entry.pack()
root.mainloop()
1
5 / 5 / 1
Регистрация: 19.05.2018
Сообщений: 200
07.07.2020, 23:32  [ТС]
Я сделал в своей манере - с муками, страданиями и не очень красиво, зато максимально понятно мне

Python
1
2
3
4
5
6
7
8
9
10
11
12
#присвоение переменной для поля ввода
        self.Ed1 = StringVar()
        # регулярное выражение
        regExp = "[^0-9]+"
        ##валидация поля          
        def Ed_limit1(Ed1):
            if re.findall(regExp, self.Ed1.get()):
                print('обработка исключения...')
                self.s = self.Ed1.get()
                index = len(self.Ed1.get()); cut = self.s[0:index-1]; tmp = str(cut)
                self.Ed1.set(tmp)
        self.Ed1.trace("w", lambda *args: Ed_limit1(self.Ed1))
Добавлено через 3 минуты
Цитата Сообщение от kapbepucm Посмотреть сообщение
entry.register
Это в документации Ткинтер к вижету энтри? Я просто поверхностно читал доки, такое чувство, что основной акцент сделан на визуальную составляющую в 99% свойств виджета.
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,648
08.07.2020, 10:11
Цитата Сообщение от Guitarist Посмотреть сообщение
Это в документации Ткинтер к вижету энтри?
Registers a Tcl to Python callback. Returns the name of a Tcl wrapper procedure. When that procedure is called from a Tcl program, it will call the corresponding Python function with the arguments given to the Tcl procedure. Values returned from the Python callback are converted to strings, and returned to the Tcl program.
1
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 579
15.01.2025, 12:22
- Здравствуйте Ребята! Всего Вам самого наилучшего!
В моем приложении тоже есть Поле Ввода. Хотел применить Ваш способ запрета всех символов кроме цифр.
Но ничего не выходит. Ваш маленький пример (от kapbepucm, см. выше в Теме) работает на 100%.
Сделал для данной Темы маленький пробный примерчик. Приводится ниже:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from tkinter import *
# from tkinter import ttk
 
 
class Child:
    def __init__(self, datas):
        # (.....)
        self.datas = datas
        # (.....)
        self.ent_rows = None
        # (Основное Окно)
        root = Tk()
        root.title('Проба')
        root.geometry("230x230+600+250")
        root.resizable(False, False)
        root.config(bg='light gray')
        # (.....)
        self.draw_widgets(root)
 
        root.mainloop()
 
 
    def draw_widgets(self, root):
        xx = 10
        yy = 10  # отступ по вертикали
        l_ws, l_hs = 120, 20  # (размеры Меток)
        e_ws, e_hs = 70, 20  # (размеры Полей Ввода)
 
        # (число Строк)
        lab_rows = Label(root, text='Число Строк:', bg='light gray', font="Arial 10 bold", anchor="w")
        lab_rows.place(width=l_ws, height=l_hs, x=xx, y=yy)
        yy += 20
        self.ent_rows = Entry(root, bg='light green', font="Arial 10 bold")
        self.ent_rows.place(width=e_ws, height=e_hs, x=xx, y=yy)
        self.ent_rows['vcmd'] = (self.ent_rows.register(self.validate), '%P', '%d')
        # self.ent_rows['validatecommand'] = (self.ent_rows.register(self.validate), '%P', '%d')
        yy += 20
 
    def validate(self, value: str, action: str):  # ((( ПОЧЕМУ-ТО НЕ ВКЛЮЧАЕТСЯ ??? !!! )))
        """
          - функция-валидатор Правильного Числа
        :param value: - значение (введенная Строка)
        :param action: - действие ('0' - изъятие Символа; '1' - добавление Символа; '-1' - Поле Ввода - пусто)
        :return: - True/False
        """
        print(f"***  validate  ***")
 
# обращение:
datas = [(9, 9, 10)]
child = Child(datas)
- НЕ ЗАПРЕЩАЕТ буквы!
Смотрю на пример уже день. Чего я в упор не вижу?
Подскажите пожалуйста. Заранее спасибо!
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,648
15.01.2025, 15:34
Цитата Сообщение от Staut Посмотреть сообщение
Чего я в упор не вижу?
Если Вы используете мой пример, то попробуйте в строке 33, которая отвечает за создание виджета добавить параметр validate="all", я вижу он у Вас отсутвует, ну и также def validate должна чтото возвращать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2025, 15:34
Помогаю со студенческими работами здесь

Поле ввода Entry и messagebox
Добрый день! Необходимо по нажатию кнопки выводить меседжбокс с сообщениями в зависимости от того,что введено в поле Entry Пробовал...

Непонятное поведение полей ввода Entry при изменении их состояния
Здравствуйте, помогите разобраться с поведением виджета Entry. Есть условия (Condition1, Condition2), которые выбираются в...

Как запретить ввод букв и других символов кроме цифр в поле ввода (Entry)
Всем доброго времени суток. Нужна помощь!!! Пишу программу и она должна проводить математические операций с введенными значениями в поле...

Текст из поля Entry() при нажатии кнопки Enter перенести в список Listbox()
С помощью модуля " Tkinter" написать программу, состоящую из поля Entry() и списка Listbox(), в которой набранный текст в поле Entry() при...

Маска ввода для Entry и подсчет результата
Здравствуйте! Мне необходимо сделать программу - клавиатурный тренажер. При нажатии на enter в поле ввода Entry обновляется Label, где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Рисование коллайдеров Box2D v2 на Three.js с помощью порта @box2d/core
8Observer8 06.06.2025
Используется порт Box2D v2 под названием @box2d/ core - пакет NPM. Загрузил документацию Box2D v2 на Netlify: https:/ / box2d-v2-docs. netlify. app/ Документацию Box2D v2 можно скачать с официального. . .
Как создать стек в Python
AI_Generated 05.06.2025
Как архитектор с более чем десятилетним опытом работы с Python, я неоднократно убеждался, что знание низкоуровневых механизмов работы стеков дает конкурентное преимущество при решении сложных задач. . . .
Server-Sent Events (SSE) в Node.js
run.dev 05.06.2025
Потоковая передача данных с сервера прямо в браузер стала повседневной потребностью - от биржевых графиков и спортивных трансляций до чатов и умных дашбордов. Много лет разработчики полагались на. . .
Создаем RESTful API на Golang с Fiber
golander 04.06.2025
Я перепробовал десятки фреймворков для создания RESTful API за последние годы, и когда впервые столкнулся с Fiber, понял, что это совсем другой уровень. Нет, я не собираюсь рассказывать сказки о. . .
Как работать с куки в ASP.NET Core
UnmanagedCoder 04.06.2025
Когда я впервые начал работать с куки в ASP. NET Core, меня поразило, насколько отличается работа с ними от классического ASP. NET. В Core все стало более декомпозированным - больше нет удобного. . .
Рисование коллайдеров физического движка Box2D-WASM v3 на Three.js
8Observer8 04.06.2025
Erin Catto (автор Box2D) переписал с нуля Box2D v2 с С++ на Си и появилась версия Box2D v3. Birch-san собрал Box2D v3 в WebAssembly (WASM), чтобы можно было использовать Box2D v3 на JavaScript. В. . .
Worker Threads и многопоточность в Node.js
Reangularity 03.06.2025
Если вы когда-нибудь посещали собеседования на позицию Node. js разработчика, почти наверняка слышали заезженную фразу: "Node. js - однопоточная платформа". Звучит как неоспоримый факт, который. . .
Event-Driven CQRS на C# с паттерном Outbox
stackOverflow 03.06.2025
В традиционной модели происходит примерно следующее: вы получаете команду, обрабатываете ее, сохраняете результат в базу данных и затем пытаетесь опубликовать событие в брокер сообщений. Но что если. . .
OwenLogic: перенос сетевых переменных в панель Weintek (EasyBuilder Pro)
ФедосеевПавел 03.06.2025
ВВЕДЕНИЕ ПЕРЕД ЭКСПЕРИМЕНТАМИ - СОЗДАЙТЕ РЕЗЕРВНЫЕ КОПИИ ПРОЕКТОВ На момент написания статьи (02 июня 2025 г. ) самыми актуальными версиями ПО являются: OwenLogic v. 2. 10. 366 EasyBuilder Pro. . .
Dev-c++5.11 Покорение вершины
russiannick 02.06.2025
С утра преследовала одна мысль - вот бы выучить С++. Сказано-сделано. Окончив смену, скачал в интернете бестселлер Дэвиса Dev-C++ для чайников. Книга оказалась интересной и я скачал среду, на примере. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »