2014-01-24 2 views

ответ

0

Виджет text поддерживает полную функциональность отмены/повтора. Вам просто нужно включить его; поскольку не все виды использования text хотят такого рода вещи, это по умолчанию отключено. Чтобы включить его, вам просто нужно установить для параметра boolean -undo значение true. Это так же просто (хотя способ, которым вы его пишете, может немного отличаться на других языках, кроме Tcl, например, это undo в Tkinter).

Однако PerlTk похоже запутывается в беспорядок. По какой-то причине виджет Tk::Text не поддерживает отмену/повтор (почему? Механизм там, выкапывает.), А виджет Tk::TextUndo не имеет возможности повторного использования (почему это было бы опущено?) Все это ограничения в PerlTk, а не сам Tk. В этом случае лучшим выбором может быть класс Tk::Text::SuperText, хотя для меня это очень странно, поскольку он просто делает то, что я считаю основным функциональностью Tk.

Возможно, это устаревшая документация CPAN.

+0

Можете ли вы вводить команды Tcl, как вы можете делать с Tkinter? –

0

Проблема заключается в том, что «» связывания назначается дважды, для виртуального события «<>» (для реализации Emacs-как склеивание) и к виртуальному событию «<>». A нормальный Tk::Text не имеет функции отмены, поэтому наличие привязки C-y имеет смысл. К сожалению, эта привязка сталкивается при использовании Tk::TextUndo.

У вас есть следующие возможности:

  • использовать другие привязок для Redo (например, F12 связывания, см Tk :: MainWindow исходного кода для полного списка, или «Повторить» запись в контекстном меню)
  • удалить C-y переплет для <<Paste>> глобально, например с помощью: $mw->eventDelete('<<Paste>>', '<Control-Key-y>');

Я не знаю, как это может быть решена лучше всего в самом источнике Perl/Tk. Проще всего было бы удалить привязку ключа emacs для '<>' здесь, но тогда пользователи emacs могут быть недовольны. Я открыт для предложений ...