Ekranda göstermek zorunda olduğum bazı resimleri döndürmeye çalışıyorum, bu resim bir stacklayout içerisindedir ve bunları yatay yerine Portre olarak göstermem gerekiyor, resmi kullanıyorum Widget TeşekkürlerKivy bir resmi döndürme
cevap
ile karıştırmayın geçmedenseni bu açıklık ediyorum, ama doğrusu bunun için yeni bir widget oluşturmak ve kullanmak olacaktır:
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()
Sonra, bu widget'ı diğer Image widget'ları olarak kullanın, sadece oynayabileceğiniz bir "açı" özelliğiniz var.
Not: scatter örneği dışında, çarpışma algılaması görüntü üzerinde işlenmez. Dağılım sadece bir şeyi döndürmek için pahalı olabilir, ama en azından çarpışma çalışır.
Bunu yapmanın iki yolu olduğunu düşünüyorum. İki cevap gönderirim ve diğerlerinin doğru yaklaşımın ne olduğuna karar vermesine izin vereceğim. Ben kişisel olarak bu yöntemi tercih ediyorum, çünkü hesaplamanın daha hafif olduğunu düşünüyorum. Ancak, bu o kadar da mantıklı değil
Bu yöntem RelativeLayout ve iki bağlam talimatı kullanır (Döndür ve Çevir).
1 - Görüntüyü RelativeLayout içine gömmeniz gerekir. Niye ya? Döndürme yolu, (0,0) koordinatına, yani sol alt köşeye tırnak koymaya benzer olduğu için. RelativeLayout, 0,0 değerini Widget'ın konumuna ayarlar. Eğer daha önce belirttiğimiz gibi canvas
3- kullanmak gerekecektir
2-, Döndürme kullanıcı koordinat (0,0) bir çivi koymak için eşdeğerdir. Bir kağıt parçası düşün. Köşeye bir çivi koyarsanız, dönüş solda bitecek. Bu nedenle, döndürmeden önce, sağınıza Translate kağıt parçası gerekir.
4-1 Rotate RelativeLayout ve Beklediğiniz konumda sona erecektir.
RelativeLayout kullanmanın başka bir avantajı vardır. Zaten kapsamlı, ölçekleme veya çeviri ile çalışıyorsanız, anlamanız gereken iki önemli yönergeyi (PushMatrix ve PopMatrix) içerir.
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()
Ben Scatter bunun için kullanılmasını olması gerekiyordu sanmıyorum: Burada
bir örnek kodudur. Ama sanırım daha sezgisel bir çözüm. Dağılım, bir döndürme (ve ayrıca bir ölçek) özelliği içerir.Temel olarak, Görüntüyü bir Dağıtıcıya yerleştirdim ve döndürme özelliğini 90 derece döndürmek için kullanıyorum.
Neden bu görev için Scatter kastedilmiyor? Temelde jestleri ona izin verdiği için. Temel olarak parmaklarınızla çevirebilir, döndürebilir veya ölçekleyebilirsiniz (veya multi-touch mouse emulation'u kullanarak). Bu yüzden bir sonraki örnekte do_scale
, do_rotation
ve do_translation
hatalarını ayarlamıyorum. Eğer toto_tico önceki 2 cevap yapmak için bir yoldur 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 menşei mülkiyeti için –
Teşekkür ederim, en iyi çözüm gibi görünüyor, yardımınız için teşekkürler, kivy için oldukça yeni, çerçevenin nasıl çalıştığını hala özlüyorum :) – nukedbit
Her zaman önemli nesne yönelimli olmak. Teşekkürler. – ehsan88