画面に表示する必要があるいくつかの写真を回転させようとしています。これらの写真はスタックレイアウト内にあり、横向きではなく縦向きで表示する必要があります。画像ウィジェットを使用していますありがとう
3 に答える
Scatterがこれに使用されることを意図しているとは思いません。しかし、私はより直感的な解決策だと思います。Scatter には、回転 (およびスケール) プロパティが含まれています。
基本的に、Scatter 内に Image を埋め込み、rotation プロパティを使用して 90 度回転させます。
Scatterがこのタスクに向いていないと言うのはなぜですか。基本的には、ジェスチャーを許可するためです。基本的に、指で (またはマルチタッチ マウス エミュレーションを使用して) 平行移動、回転、拡大縮小を行うことができます。そのため、次の例では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()
私はそれらがこれを行う2つの方法だと思います。2つの回答を投稿し、他の人に正しいアプローチを決定させます. 私は個人的にこの方法を好みます。計算が軽いと思うからです。ただし、それほど直感的ではありません
このメソッドは、RelativeLayout と 2 つのコンテキスト命令 (Rotate と Translate) を使用します。
1 - RelativeLayout内に Image を埋め込む必要があります。なんで?Rotate の動作は (0,0) 座標、つまり左下隅に釘を置くのと似ているためです。RelativeLayoutは、ウィジェットの位置に 0,0 を設定します。
2-キャンバスを使用する必要があります
3- 前に言ったように、Rotate 命令は (0,0) 座標に釘を置くのと同じです。一枚の紙について考えてみてください。角に釘を入れると回転が左に切れる。そのため、回転する前に、紙を右に移動する必要があります。
4- これで、RelativeLayout を回転させることができます。期待する位置で終了します。
RelativeLayout を使用する利点は他にもあります。回転、スケーリング、または移動を広範囲に行う場合は、理解する必要がある2 つの重要な指示 ( 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()