Добавть Scale для управления положением солнца на форме
для того чтобы слайдер занимал всю ширину передайте параметры методы pack
s.pack(fill=BOTH, expand=True, pady=10)
Давайте теперь упорядочим наше приложение чтобы было проще управлять нашим кодом. Перепишем код из предыдущего задания следующим образом:
зачем нам это нужно?
А для того что мы можем помимо манипуляцией одним объектом можем управлять всем что происходит на форме. Но для этого нам надо создать еще одну функцию которая будет отвечать за отрисовку всего.
В python есть возможность добавлять специальный контролеры, которые позволяю вводить числа, можно добавлять кнопки. Есть еще такая прикольная компонента которая называется Scale, с помощью нее можно выбирать значение мышью.
Давайте добавим Scale себе на форму:
собственно, у него три главных параметра
функция slider.pack() размещает слайдер на форме. Можно запустить и проверить
самое прикольное? что вы можете добавить реакцию на изменение значения слайдера.
Например можем попробовать вызывать функцию draw_all() при сдвиге слайдера. Для этого надо добавить четвертый параметр в Scale
если теперь запустить и попробовать подвигать ползунок, то увидим ошибки
дело в том, что в command надо передать функцию которая принимает один параметр. А у draw_all нет параметров. Поэтому имеет смысл создать еще одну функцию которая будет вызывать draw_all.
Вот так:
можно еще посмотреть, что попадает в этот самый value:
def on_scale_change(value):
print(value) # добавил value
draw_all()
мы можем попробовать использовать это значение чтобы двигать объекты на форме. Попробуем передать значение в функцию
запускаем:
хм, ну вроде с одной стороны прикольно, а с другой какие-то артефакты.
Дело в том, что когда мы вызываем draw_all
мы как бы рисуем поверх предыдущего нарисованного изображения.
И в общем чтобы наше предыдущее изображение не мешало новому, нам надо очищать канву для рисования.
Для это его специальная функция delete, добавим ее в начало draw_all
запускаем:
красота! =)
Добавть Scale для управления положением солнца на форме
для того чтобы слайдер занимал всю ширину передайте параметры методы pack
s.pack(fill=BOTH, expand=True, pady=10)