Найти - Пользователи
Полная версия: Tkinter: использование процедур с параметрами в bind
Начало » GUI » Tkinter: использование процедур с параметрами в bind
1 2
Андрей Светлов
Мне, как правило, проще читать более короткие программы. Но без фанатизма, конечно.
Если на javascript на каждом шагу создают анонимные функции - это тоже непривычно?
Или анонимные классы в java и анонимные методы C# вызывают отторжение?
В конце концов даже в С++ появились лямбды - и это неспроста :)
Subideal Ox
Андрей Светлов
Мне, как правило, проще читать более короткие программы. Но без фанатизма, конечно.
Если на javascript на каждом шагу создают анонимные функции - это тоже непривычно?
Или анонимные классы в java и анонимные методы C# вызывают отторжение?
В конце концов даже в С++ появились лямбды - и это неспроста :)
Лямбда со значениями по умолчанию - это хороший и понятный ход. Хотя, если обработчик будет усложняться, добавятся выбор, циклы и т.п., то тело превратится в трудно читаемое заклинание. Но я не об этом.

Я про каррирование в виде partial у PooH'a или в моем варианте со вложенными функциями. На мой вкус - это оптимальный подход на случай, если лямбда становится слишком сложной. Но мне кажется, что не имея опыта функционального программирования, такой код выглядит непривычно. Или я ошибаюсь? Надо спросить у Dr.Livsi. Что скажите, доктор?

SO
Dr.Livsi
господа программисты, большое спасибо за отзывы. Если честно - я еще не успел испробовать все эти способы. Мне это еще предстоит. Дело в том, что я сам по образованию не являюсь программистом - для меня те программы, что пишу есть способ уйти от обезьянней работы. Конечно, очень жаль, что метод bind не позволяет использовать параметры при вызове функции. Для меня решающее значение имеет простота программирования и сильно заморачиваться с лямбдами не хочется по причине того, что процедуры, которые я собираюсь вставлять в bind, как правило, достаточно сложны и могут занимать пару десятков строк. Создание класса так же является проблематичным. Дело в том, что использование процедуры с параметрами мне необходимо, что бы сократить количество кода. В моем конкретном примере, если пытаться “обернуть” в класс - то уменьшения кода не будет. Там небольшая процедурка, и ее можно попробовать “обернуть” в лямбда. Возможно, в других случаях, буду использовать классы. Если только не перейду на wxWidgets - все таки для меня большое значение имеет простота и скорость создания gui, а там boa есть. Интересно, как обстоит дело с событиями…
PooH
Dr.Livsi
Если только не перейду на wxWidgets - все таки для меня большое значение имеет простота и скорость создания gui, а там boa есть.
Если tkinter устраивает вас виджетами и внешним видом, лучше останьтесь на нем. Быстрее и проще чем на нем гуй вам не написать. У других библиотек API сложнее и куда дальше от стиля питона. От boa вообще толку как от козла молока…

Dr.Livsi
Интересно, как обстоит дело с событиями…
В общих чертах примерно так-же.
Subideal Ox
Dr.Livsi
Конечно, очень жаль, что метод bind не позволяет использовать параметры при вызове функции.
В том-то и дело, что очень даже позволяет! Только нюанс в том, что такая функция (с параметрами) должна возвращать функцию (sic!). Это очень простое предложение, как правило, почему-то очень сложно дается для понимания обычным человеческим существам. Это как сатори или нирвана у дзен-будистов - понимание приходит как вспышка - функция возвращает функцию - к этому нельзя прийти, это можно только понять. И сразу все станет на свои места. По-крайней мере у меня было так =D

Все обсуждавшиеся варианты делают именно это:

1. Лямбда.
2. Перегруженный __call__ в классе.
3. partial из модуля functool.
4. вложенная функция.

Четыре благородных пути - совсем махаяна получается =D

Я бы посоветовал Вам проработать мой пример - самая буквальная реализация изложенной здесь идеи. И не забывайте повторять функция возвращает функцию

PS
Я, к слову, сам не программист, но это вовсе не причина для отказа от постижения Дао Питона ;)
Dr.Livsi
Спасибо за отзывы :))) Буду постигать Tkinter далее :)))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB