Управление Tk виджетами? - PullRequest
1 голос
/ 19 декабря 2011

Мне очень нравится tk, но у меня есть одна проблема - как правильно управлять всеми виджетами.Если я создаю 20 виджетов, у меня есть 20 переменных, или обычно я создаю хеш, где я храню их все.Совсем недавно я создал класс, который имеет отношения родитель / потомок, где я могу создать родительский объект, например, фрейм, и добавить к нему дочерние виджеты, которые в основном выглядят так:

parent = TkObject.new(TkRoot.new)
parent.add("MAIN_FRAME", TkFrame.new.pack)
parent.child("MAIN_FRAME").add("SUBMIT", TkButton.new(:text => "Submit").pack)

Это яfind поддерживает порядок, но я получаю очень длинные строки для доступа к виджетам.Я пытаюсь выяснить, есть ли лучший способ сделать это, и пытаюсь ли я заново изобрести колесо с моим классом, упомянутым выше.

1 Ответ

0 голосов
/ 20 декабря 2011

Внутренние имена Tk для виджетов работают очень похоже на то, как это происходит, но вполне работоспособное решение - сохранить только дескрипторы «интересных» виджетов (обычно в хэше). Затем вы просто используете этот дескриптор этого хеша как объект в вашей программе, чтобы вы могли напрямую ссылаться на интересные части (например, с синтаксисом Perl):

$thing->{submit}->invoke();

Конечно, если вы обращаетесь к объекту, очень похожему на этот, особенно из-за пределов реализации объекта, вам, вероятно, следует создать метод для его наблюдения. Это добавляет немного производительности, но делает вещи намного чище (Закон Деметры и все такое).

Весь трюк, чтобы справиться со всем этим, состоит в том, чтобы рассматривать всю сложность, как плавание в океане; Неважно, насколько глубока вода, пока вы плаваете только на поверхности. (Если вам действительно нужно огромное количество вложений, вы, вероятно, делаете это неправильно; GUI в основном работают лучше, когда они не очень вложенные.)

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