Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Tkinter: использование процедур с параметрами в bind [RSS Feed]

#1 Ноя. 23, 2010 16:51:15

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Tkinter: использование процедур с параметрами в bind

Мне, как правило, проще читать более короткие программы. Но без фанатизма, конечно.
Если на javascript на каждом шагу создают анонимные функции - это тоже непривычно?
Или анонимные классы в java и анонимные методы C# вызывают отторжение?
В конце концов даже в С++ появились лямбды - и это неспроста :)



Офлайн

#2 Ноя. 23, 2010 17:17:15

Subideal Ox
От:
Зарегистрирован: 2010-11-23
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter: использование процедур с параметрами в bind

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

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

SO



Отредактировано (Ноя. 23, 2010 17:19:14)

Офлайн

#3 Ноя. 25, 2010 23:15:29

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Tkinter: использование процедур с параметрами в bind

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



Офлайн

#4 Ноя. 26, 2010 05:38:28

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Tkinter: использование процедур с параметрами в bind

Dr.Livsi
Если только не перейду на wxWidgets - все таки для меня большое значение имеет простота и скорость создания gui, а там boa есть.
Если tkinter устраивает вас виджетами и внешним видом, лучше останьтесь на нем. Быстрее и проще чем на нем гуй вам не написать. У других библиотек API сложнее и куда дальше от стиля питона. От boa вообще толку как от козла молока…

Dr.Livsi
Интересно, как обстоит дело с событиями…
В общих чертах примерно так-же.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Ноя. 26, 2010 11:46:34

Subideal Ox
От:
Зарегистрирован: 2010-11-23
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter: использование процедур с параметрами в bind

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

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

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

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

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

PS
Я, к слову, сам не программист, но это вовсе не причина для отказа от постижения Дао Питона ;)



Офлайн

#6 Ноя. 28, 2010 10:01:32

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Tkinter: использование процедур с параметрами в bind

Спасибо за отзывы :))) Буду постигать Tkinter далее :)))



Офлайн

  • Начало
  • » GUI
  • » Tkinter: использование процедур с параметрами в bind[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version