Ich versuche, einige Bilder zu drehen, die ich auf dem Bildschirm zeigen muss, diese Bilder sind in einem Stapellayout, und ich muss sie als Portrait statt Landschaft zeigen, ich benutze das Bild Widget DankeKivy, wie man ein Bild dreht
Antwort
Die vorherige 2 Antwort von toto_tico eine Art und Weise zu tun bekommen verwirren, aber ich würde lieber ein neues Widget für sie erstellen und verwenden es:
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()
Dann verwenden Sie dieses Widget als andere Bild Widget, Sie haben nur eine "Winkel" -Eigenschaft, mit der Sie spielen können.
Hinweis: Die Kollisionserkennung wird im Bild nicht behandelt, außer im Streuungsbeispiel. Scatter kann teuer sein, nur um etwas zu drehen, aber zumindest funktioniert die Kollision.
Ich denke, sie sind zwei Möglichkeiten, dies zu tun. Ich werde zwei Antworten veröffentlichen und andere entscheiden lassen, was der richtige Ansatz ist. Ich persönlich bevorzuge diese Methode, weil ich denke, dass es leichter ist. Es ist jedoch nicht so intuitiv
Diese Methode verwendet eine RelativeLayout und zwei Kontextanweisungen (Drehen und Übersetzen).
1 - Sie müssen das Bild in die RelativeLayout einbetten. Warum? Weil die Art, wie Rotate funktioniert, ähnlich ist, einen Nagel in die (0,0) -Koordinate zu setzen, d. H. Die untere linke Ecke. Die RelativeLayout setzt die 0,0 auf die Position des Widgets.
2- Sie müssen die canvas
3- Wie gesagt verwenden, ist die Drehanweisung äquivalent einen Nagel in den (0,0) setzen koordinieren. Denk an ein Stück Papier. Wenn Sie einen Nagel in die Ecke legen, endet die Drehung auf der linken Seite. Also, vor der Rotation, müssen Sie Translate das Stück Papier auf der rechten Seite.
4- Jetzt können Sie das RelativeLayout Rotate und es wird in der Position enden, die Sie erwarten.
Es gibt einen weiteren Vorteil der Verwendung eines RelativeLayout. Es enthält bereits zwei wichtige Anweisungen (PushMatrix und PopMatrix), die Sie verstehen müssen, wenn Sie intensiv mit Drehen, Skalieren oder Übersetzen arbeiten. Hier
ist ein Beispielcode:
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()
Ich glaube nicht die Scatter gemeint Verwendung dafür sein. Aber ich denke, es ist eine intuitivere Lösung. Der Streubereich enthält eine Rotationseigenschaft (und auch eine Skalierungseigenschaft).
Grundsätzlich habe ich das Bild in einem Scatter eingebettet und verwenden Sie die Rotationseigenschaft, um 90 Grad zu drehen.
Warum sage ich die Scatter ist nicht für diese Aufgabe gedacht. Grundsätzlich, weil es Gesten darüber erlaubt. Sie können grundsätzlich mit Ihren Fingern übersetzen, drehen oder skalieren (oder die multi-touch mouse emulation verwenden). Deshalb setze ich im nächsten Beispiel die Werte do_scale
, do_rotation
und do_translation
auf false. Ich Klärung dieses, bevor Sie mit dem 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. Wie man ein UIImageView dreht?
- 2. Wie man eine Instruktion auf einem kivy Canvas dreht?
- 3. Wie man ein Bild seitwärts oder auf dem Kopf dreht?
- 4. Wie man ein Div mit jQuery dreht
- 5. Wie man ein Bildschirmhintergrundbild in Kivy einstellt
- 6. Wie man ein Array effizient dreht?
- 7. Wie man ein Widget in GWT dreht?
- 8. Wie man meinen Charakter dreht?
- 9. Wie man Bild mit Matplottlib ohne Grenze dreht?
- 10. Wie man ein Zeichen mit aktiviertem Anti-Aliasing dreht
- 11. Wie man Bitmap dreht, ohne ein neues zu erstellen?
- 12. Warum dreht CGContextDrawImage mein Bild
- 13. Winston: wie man Protokolle dreht
- 14. Wie man eine SVG Sechseckform dreht?
- 15. Wie man Bild in elliptischer Form dreht, ohne das Bild zu drehen CSS
- 16. Kivy Splash Screen Bild mit Einblendeffekt
- 17. Wie man ein Objekt auf der Achse world three.js dreht?
- 18. Wie man ein spezifisches Objekt in openGL dreht?
- 19. CSS3: Wie man ein img gleichzeitig dreht und skaliert?
- 20. Wie man ein ArcSegment um das Ellipsenzentrum dreht
- 21. Wie man ein 3D-Objekt auf der Achse three.js dreht?
- 22. Wie man ein Objekt entlang einer kreisförmigen Bahn dreht?
- 23. Wie man ein 2D Array von ganzen Zahlen dreht
- 24. Wie dreht man ein auf einem JFrame (VLCJ) platziertes Video?
- 25. So zeigen Sie ein Bild mit Kivy an
- 26. ImageIO.read() dreht immer mein hochgeladenes Bild
- 27. Wie scrollt man ein GridLayout in Kivy ScrollView?
- 28. dreht Bild zeigt „Out of Memory“ Ausnahme
- 29. Wie man einen Drawable mit ObjectAnimator dreht?
- 30. jcrop dreht sich transparent Bild schwarz
+1 für die Herkunft Eigenschaft –
Danke ich werde es später versuchen, es scheint die beste Lösung, danke für Ihre Hilfe, ich bin ziemlich neu zu kivy Ich vermisse immer noch etwas auf, wie das Framework funktioniert :) – nukedbit
Es ist immer wichtig objektorientiert sein. Vielen Dank. – ehsan88