Python / Tkinter: создание панели инструментов, которая предоставляет команды редактирования, копирования, вставки - PullRequest
0 голосов
/ 06 ноября 2010

Я ищу предложения о том, как можно реализовать панель инструментов, которая предоставляет команды редактирования, копирования, вставки с использованием инфраструктуры Tkinter. Я понимаю, как создать панель инструментов и связать команды панели инструментов, но я не совсем понимаю, как команды, связанные с кнопками панели инструментов, узнают, к какому виджету применить действие вырезать, скопировать или вставить, потому что виджет с действием редактирования потеряет фокус, когда кнопка панели инструментов нажата. Моей первой мыслью было, чтобы каждый виджет с потенциальным действием редактирования установил глобальную переменную, когда виджет получает фокус, и чтобы другие виджеты (без действия редактирования, например кнопки, ползунки, флажок / радиобокс и т. Д.) Очистили эту глобальную переменную. Но это звучит сложно в обслуживании, если я не создам каркас виджетов, которые наследуют это поведение.

Есть ли более простой способ сделать это или я на правильном пути?

Ответы [ 2 ]

2 голосов
/ 06 ноября 2010

Вам не нужно поддерживать большую платформу, вы можете создать единственную привязку для корневого виджета для <FocusIn> и поместить всю логику в эту привязку.Или используйте focus_class и привяжите к классу all.

Привязка к корню затронет только дочерние элементы корня, привязка к all повлияет на все виджеты во всем приложении.Это имеет значение, только если у вас есть более одного виджета верхнего уровня.

1 голос
/ 06 ноября 2010

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

...