Почему краска работает без вызова? [Дубликат]

Если вы хотите использовать системную установку Apple Python 2.7, имейте в виду, что она не совсем соответствует стандартам именования, изложенным в PEP 394 .

В частности, он включает необязательные символические ссылки с суффиксом 2.7, на которые вам говорят не полагаться, и не включает рекомендуемые символические ссылки с суффиксом 2, о которых вам говорят , если полагается.


Если вы хотите исправить это, придерживаясь Apple Python, вы можете создать свои собственные символические ссылки:

$ cd 
$ ln -s /usr/bin/python python2

Или псевдонимы в вашей конфигурации bash:

alias python2 python2.7

И вы можете сделать то же самое для Apple 2to3, easy_install и т. д., если они вам понадобятся.

Вы не должны пытаться помещать эти символические ссылки в /usr/bin и определенно не пытайтесь переименовать то, что уже есть, или изменить настройку distutils на что-то большее, чем PEP-совместимое. Эти файлы являются частью ОС и могут использоваться другими частями ОС, и ваши изменения могут быть перезаписаны даже при незначительном обновлении от 10.13.5 до 10.13.6 или что-то в этом роде, поэтому оставьте их в покое и обходите их как описано выше.


В качестве альтернативы вы могли бы:

  • Просто используйте python2.7 вместо python2 в командной строке и в ваших shbangs и так далее ,
  • Использовать виртуальные среды или среды конда. Глобальные python, python3, python2 и т. Д. Не имеют значения, когда вы всегда используете локальную активированную среду python.
  • Прекратите использование 2,7 Apple и вместо этого установите целое другие 2.7 вместе с ним, как и большинство других ответов. (Я не знаю, почему многие из них также предлагают установить второй 3.6.Это просто добавит еще больше путаницы , без пользы.)

6
задан adatapost 14 October 2011 в 08:50
поделиться

3 ответа

Метод paint вызывается Thread Event Dispatch Thread (EDT) и находится в основном из-под вашего контроля.

Он работает следующим образом: когда вы реализуете пользователя интерфейс (вызов setVisible(true) в вашем случае), Swing запускает EDT. Этот поток EDT затем запускается в фоновом режиме, и всякий раз, когда ваш компонент должен быть окрашен, он вызывает метод paint с соответствующим экземпляром Graphics, который вы можете использовать для рисования.

Итак, когда компонент «необходимо» для перекраски? - Например, когда

  • Изменение размера окна
  • Компонент становится видимым
  • Когда вы вызываете repaint
  • ...

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

13
ответ дан aioobe 18 August 2018 в 20:40
поделиться
  • 1
    Просто немного в стороне. Для анимации может потребоваться явно вызвать repaint(). Это расписал вызов paint(Graphics) или (Swing) paintComponent(Graphics), который может быть вызван, и может быть проигнорирован. – Andrew Thompson 14 October 2011 в 09:02

На самом деле вы никогда не ссылаетесь на матод. Он автоматически вызывается автоматически, когда необходимо перекрасить область содержимого вашего фрейма. Это происходит, когда ваш кадр визуализируется в первый раз, изменяется, максимизируется (после минимального) и т. Д.

5
ответ дан akhilless 18 August 2018 в 20:40
поделиться

Если вы не знаете, как работает API рисования AWT / Swing (render), прочитайте эту статью - Покраска в AWT и Swing .

Метод Paint Независимо от того, как запускается запрос на краску, AWT использует механизм «обратного вызова» для рисования, и этот механизм одинаковый как для тяжелых, так и для легких компонентов. Это означает, что программа должна поместить код рендеринга компонента внутри определенного переопределенного метода, и этот инструментарий вызовет этот метод, когда придет время рисовать. Метод, который нужно переопределить, находится в java.awt.Component.

3
ответ дан RealSkeptic 18 August 2018 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: