Я пытаюсь повернуть некоторые фотографии, которые я должен показать на экране, эти изображения находятся внутри stacklayout, и мне нужно показать их как Portrait вместо пейзажа, я использую Image Виджет СпасибоKivy как повернуть картинку
ответ
предыдущий 2 ответ toto_tico это способ сделать, но я предпочел бы создать новый виджет для него, и использовать его:
Builder.load_string('''
<RotatedImage>:
canvas.before:
PushMatrix
Rotate:
angle: root.angle
axis: 0, 0, 1
origin: root.center
canvas.after:
PopMatrix
''')
class RotatedImage(Image):
angle = NumericProperty()
Затем, используйте этот виджет как другой виджет изображения, у вас есть свойство «angle», с которым вы можете играть.
Примечание: обнаружение столкновения не обрабатывается на изображении, за исключением примера рассеяния. Рассеяние может быть дорогостоящим только для вращения чего-то, но, по крайней мере, столкновение работает.
Я думаю, что это два способа сделать это. Я отправлю два ответа и позволю другим решить, какой подход правильный. Я лично предпочитаю этот метод, потому что я думаю, что он легче вычислить. Однако это не так, интуитивно.
Этот метод использует RelativeLayout и две контекстные инструкции (Поворот и Перевод).
1 - Вам необходимо встроить изображение внутри RelativeLayout. Зачем? Поскольку работа Rotate похожа на установку гвоздя в координате (0,0), то есть в нижнем левом углу. RelativeLayout устанавливает 0,0 в положение виджета.
2- Вам нужно будет использовать canvas
3- Как я уже говорил, команда Rotate эквивалентно положить гвоздь в (0,0) координаты. Подумайте о листе бумаги. Если вы положите гвоздь в угол, вращение закончится слева. Итак, перед вращением вам нужно сделать Translate лист бумаги справа от вас.
4 Теперь вы можете Rotate RelativeLayout, и оно закончится в том месте, которое вы ожидаете.
Есть еще одно преимущество использования RelativeLayout. Он уже содержит две важные инструкции (PushMatrix и PopMatrix), которые вы должны понимать, если вы активно работаете с вращающимися, масштабирующими или переводными.
Вот пример кода:
from kivy.app import App
from kivy.uix.stacklayout import StackLayout
from kivy.lang import Builder
Builder.load_string("""
<Example>:
Image:
source: 'kivy.png'
size_hint: None,None
size: 64,64
RelativeLayout
size_hint: None,None
size: 64,64
canvas.before:
Translate:
x: 64
Rotate:
angle: 90
axis: 0,0,1
Image:
source: 'kivy.png'
size_hint: None,None
size: 64,64
""")
class Example(App, StackLayout):
def build(self):
return self
if __name__ == "__main__":
Example().run()
Я не думаю, что Scatter предназначается, чтобы быть использовать для этого. Но я думаю, это более интуитивное решение. Scatter включает свойство вращения (а также масштаб).
В принципе, я встроил изображение внутри Scatter и использовал свойство вращения для поворота на 90 градусов.
Почему я говорю, что Scatter не предназначен для этой задачи. В основном потому, что он позволяет жесты над ним. Вы можете в основном переводить, вращать или масштабировать пальцами (или используя multi-touch mouse emulation). Вот почему в следующем примере я устанавливаю do_scale
, do_rotation
и do_translation
на false. Я разъяснении это прежде чем вы получите путать с do_rotation: false
from kivy.app import App
from kivy.uix.stacklayout import StackLayout
from kivy.lang import Builder
Builder.load_string("""
<Example>:
Image:
source: 'kivy.png'
size_hint: None,None
size: 64,64
Scatter:
pos: 0,0
size_hint: None,None
size: 64,64
do_rotation: False
do_scale: False
do_translation: False
rotation: 90
Image:
source: 'kivy.png'
size_hint: None,None
size: 64,64
""")
class Example(App, StackLayout):
def build(self):
return self
if __name__ == "__main__":
Example().run()
- 1. Невозможно повернуть картинку
- 2. Kivy показать картинку с полным разрешением
- 3. Как поставить картинку за другую картинку?
- 4. Как повернуть изображение с помощью jogl?
- 5. Как сменить картинку?
- 6. Как сделать прозрачную картинку?
- 7. Как показать картинку?
- 8. Как поменять картинку
- 9. Как отправить картинку SMS?
- 10. Как сжать любую картинку?
- 11. Как вы поворачиваете картинку в angularjs
- 12. вращать kivy виджет
- 13. Вставить картинку в картинку из цикла?
- 14. Осветите картинку
- 15. Kivy: Kivy Launcher Crash Android
- 16. Обновить картинку
- 17. Как показать картинку из строки
- 18. Как показать картинку из галереи
- 19. Как сменить кнопку на картинку?
- 20. Как добавить картинку в UITableViewCell
- 21. Как добавить картинку для контакта?
- 22. Как сфотографировать картинку на PHP?
- 23. Как заблокировать картинку в vb.net?
- 24. Как показать картинку в MonoDroid
- 25. Как установить картинку на Gridpane
- 26. Как установить картинку в QListView
- 27. Как добавить картинку в галерею
- 28. Как добавить картинку в JLabel?
- 29. Как преобразовать MathML в картинку
- 30. Как растянуть картинку в CropImageView?
+1 для свойства начала –
Спасибо, я попробую позже, это будет лучшее решение, спасибо за вашу помощь, я совершенно новичок в kivy, я все еще скучаю по тому, как работает рама :) – nukedbit
Важно всегда быть объектно-ориентированным. Благодарю. – ehsan88