9

画面に表示する必要があるいくつかの写真を回転させようとしています。これらの写真はスタックレイアウト内にあり、横向きではなく縦向きで表示する必要があります。画像ウィジェットを使用していますありがとう

4

3 に答える 3

4

Scatterがこれに使用されることを意図しているとは思いません。しかし、私はより直感的な解決策だと思います。Scatter には、回転 (およびスケール) プロパティが含まれています。

基本的に、Scatter 内に Image を埋め込み、rotation プロパティを使用して 90 度回転させます。

Scatterがこのタスクに向いていないと言うのはなぜですか。基本的には、ジェスチャーを許可するためです。基本的に、指で (またはマルチタッチ マウス エミュレーションを使用して) 平行移動、回転、拡大縮小を行うことができます。そのため、次の例ではdo_scaledo_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()
于 2013-07-16T14:40:50.150 に答える
1

私はそれらがこれを行う2つの方法だと思います。2つの回答を投稿し、他の人に正しいアプローチを決定させます. 私は個人的にこの方法を好みます。計算が軽いと思うからです。ただし、それほど直感的ではありません

このメソッドは、RelativeLayout と 2 つのコンテキスト命令 (Rotate と Translate) を使用します。

1 - RelativeLayout内に Image を埋め込む必要があります。なんで?Rotate の動作は (0,0) 座標、つまり左下隅に釘を置くのと似ているためです。RelativeLayoutは、ウィジェットの位置に 0,0 を設定します。

2-キャンバスを使用する必要があります

3- 前に言ったように、Rotate 命令は (0,0) 座標に釘を置くのと同じです。一枚の紙について考えてみてください。角に釘を入れると回転が左に切れる。そのため、回転する前に、紙を右に移動する必要があります。

4- これで、RelativeLayout を回転させることができます。期待する位置で終了します。

RelativeLayout を使用する利点は他にもあります。回転、スケーリング、または移動を広範囲に行う場合は、理解する必要がある2 つの重要な指示 ( PushMatrixPopMatrix ) が既に含まれています。

コード例を次に示します。

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()
于 2013-07-16T14:30:54.463 に答える