Не используйте ImageViewer
, используйте Label
или ScaleImageLabel
. ImageViewer
захватывает события указателя для панорамирования изображения и позволяет увеличить его. Он предназначен для использования в течение всего Form
и не будет хорошо работать в сценарии прокрутки.
Если вы хотите эту функциональность, я предлагаю поместить небольшую миниатюру в Button
, а затем, когда она нажата, показать ImageViewer
в отдельном Form
в центре BorderLayout
.
Вы не делаете ничего плохого. Python omni завершение не использует файл тегов. Это нарочно. Вы не должны делать файл тегов для omni завершения. Можно все еще сделать файл тегов для обычного перехода стека тега, но он проигнорирован omni завершением.
мне потребовалось долгое время для понимания этого, потому что C omni завершение действительно использует файл тегов. Python omni завершение работает по-другому.
можно быстро наблюдать это поведение путем попытки omni завершения в файле Python с [1 112] тип файла и затем с [1 113] тип файла.
Первый :set filetype=python
(это - значение по умолчанию), тогда :echo &omnifunc
. Завершенный Omni игнорирует файл тегов, потому что &omnifunc
python3complete#Complete
, который не использует файл тегов.
Теперь :set filetype=c
и :echo &omnifunc
. Vim рассматривает сценарий Python как файл C, таким образом &omnifunc
ccomplete#Complete
, который использует файл тегов. Конечно, обработка файлов Python как файлы C не является решением!
Ниже:
&omnifunc
(syntaxcomplete#Complete) Vimscripts реализованы preview
поведение окна отличается между предварительным просмотром файла тегов (:pta
) и omni полный предварительный просмотр. существует также завершение тега: <C-x><C-]>
. Если Вы уже используете tags
файл и хотите, чтобы Vim завершил использование тех тегов, <C-x><C-]>
завершение, которое Вы ищете, не <C-x><C-o>
.
, Но я поощряю Вас продолжать читать. Завершение Omni действительно больше, чем отмечает завершение:
import numpy as np
, тогда np.a<C-x><C-o>
подарки меню numpy
функции, запускающиеся с буквы 'a'. Завершение тега только автоматически заполняет соответствие в файле тегов. , Python omni завершение требует, чтобы сценарий Python Вы отредактировали, работает код Python. Вот простой пример с локальной переменной:
foo_name_I_expect_omni_completion
Этот короткий сценарий не работает (мое имя переменной не определяется), поэтому если я редактирую этот сценарий и пытаюсь к завершенному omni:
foo_name_I_expect_omni_completion
foo_name_<C-x><C-o>
я получаю "Шаблон, не найденный" сообщение.
Это является приводящим в бешенство, потому что шаблон, которому это должно соответствовать, находится буквально на строке выше!
, Но все мы должны заставить omni завершение работать, изменение это к [11 127] допустимый код Python:
foo_name_I_expect_omni_completion = 2
foo_name_<C-x><C-o>
Теперь omni работы завершения!
, Поскольку, второй пример, omni завершение также работает, если шаблон для соответствия находится в другом файле, пока тот файл видим (с import
оператор) к отредактированному сценарию.
Снова, я буду использовать foo_name_I_expect_omni_completion=2
. Я сохранил файл с этой остротой как [1 134]. Теперь в новом файле, example.py
, я импортирую mymodule
:
import mymodule
, Как только я ввел import mymodule
, i_<C-x><C-o>
работы над именем модуля:
import mymodule
mym<C-x><C-o>
Omni завершают повороты это в:
import mymodule
mymodule.
и меню шаблонов открывается (см. :h completeopt
для конфигурирования поведения меню), в которой точке я могу сделать обычное <C-n><C-y>
, чтобы выбрать первый объект в списке и выйти из omni, завершенного назад к режиму вставки.
import mymodule
mymodule.foo_name_I_expect_omni_completion
, Если omni завершение кажется неспособным для наблюдения импортированного модуля, это - потому что модуль, который Вы импортируете, не является исполняемым файлом.
В отличие от игрушечного примера выше, это трудно разыскать, если импортированный модуль также импортирует пакеты, и у Вас есть несколько версий Python с различными пакетами, установленными в каждой версии.
, Например, я имею 3.6 и 3,7 установленных, но я только установил определенный пакет на 3,6. И тот же самый пакет был импортирован модулем, который я импортировал в сценарии, который я пытался отредактировать с завершенным omni.
Так или иначе, python3.6 был моим значением по умолчанию python3 от удара, но python3.7 был моим значением по умолчанию от Vim. Таким образом, модуль казался допустимым, когда я выполнил его от удара, потому что моя python3.6 установка имела необходимый пакет.
Проверка, которую использует версия Vim Python:
python3 print(sys.version)
я понял это путем разыскивания сценариев Vim, которые делают завершение.
От справки Vim:
:h compl-omni-filetypes
файл, используемый для {типа файла}, должен быть автозагрузкой / {тип файла} complete.vim в 'runtimepath'. Таким образом для "Java" это - autoload/javacomplete.vim.
Эти autoload/{filetype}complete.vim
файлы находятся в Вашей установке Vim. Например, вот мой C и файлы Python:
/usr/share/vim/vim81/autoload/ccomplete.vim
/usr/share/vim/vim81/autoload/python3complete.vim
, С другой стороны, вызов :echo &omnifunc
и находят Vimscript на GitHub: https://github.com/vim/vim/blob/master/runtime/autoload /
я начал подозревать свое фундаментальное неверное толкование проблемы, когда я нашел, что Word tag
не появляется в python3complete.vim
файл:)
preview
поведение , я всегда смущался поведением окна предварительного просмотра. Omni, завершенный , имеет другое preview
поведение от тегов.
Первый, для получения окна предварительного просмотра с [1 147] опция Vim completeopt
должна содержать preview
и или menu
или menuone
.
completeopt
значения по умолчанию к [1 153]. Установить опции явно, например, использовать menuone
вместо этого на [1 155]:
set completeopt=menuone,preview
menuone
заставляет меню всегда появиться, даже если существует только один шаблон, который соответствует. С [1 157], меню не появляется для единственного соответствия, таким образом, ни один не делает preview
окно. Используя [1 159] гарантии preview
открывается окно.
Выключают preview
для предотвращения разделения окна во время завершенного omni:
set completeopt-=preview
Уведомление, что preview
поведение для [1 163] (который открывается при выделении пункта меню) отличается от preview
поведение для тегов (который Вы открываете с [1 165] или :pta
)
Omni complete's preview
выставочные разные вещи в зависимости от объекта, выделенного в меню завершения. Если это - переменная, pydoc для его типа данных показывают; если это - функция, ее docstring показывают.
Какой модуль содержит символ, который вы пытаетесь завершить? Это в Python Stdlib? Или это сторонний модуль?
Убедитесь, что модуль / пакет находится в Pythonpath.
В VIM делайте:
:python import sys
:python print sys.path
, чтобы добавить каталог модуля:
:python sys.path.append("/path/to/directory/")
Поскольку вы были благоразумны и убедились, что ваш код доступен по PYTHONPATH, согласно предложению codeape, есть ли вероятность, что вы столкнулись с ошибкой import
для Vim Python omni-complete? Эта ошибка все еще существует в Vim 7.2.245.
По сути, если любой оператор import не работает в файле, в котором вы работаете, независимо от того, обернут ли он в Try-Except
клаузулу, это полностью нарушит omni-complete. Это должно быть довольно просто проверить, поскольку большинство импортов происходит в самом начале файла.
Если вы решите, что причиной ваших проблем является эта ошибка, ваши возможности включают:
import
, которые не работаютc-x c-n
работает для получения списка членов объекта.