2017-05-09 17 views
1

私はKivyの新機能ですが、キャンバスにテキストを配置しようとしていますが、使用しているLabelが正しく配置されていないことがわかりました。同じ値を持つRectangleを描画している場合、正しい位置にあります。Kivy:ラベルには別の位置に矩形があります

私はいくつかの同様の質問をここに見つけましたが、私は答えがなかったと思います。ここで

は私のコードです:

class MyClass(Widget): 

    def __init__(self, **kwargs): 
     super(MyClass, self).__init__(**kwargs) 
     self._keyboard = Window.request_keyboard(self._keyboard_closed, self) 
     self._keyboard.bind(on_key_down=self._on_keyboard_down) 

    def _keyboard_closed(self): 
     pass 

    def _on_keyboard_down(self, keyboard, keycode, text, modifiers): 
     with self.canvas: 
      lbl_staticText = Label(font_size=12)  
      lbl_staticText.text = 'This is some nice random text\nwith linebreak' 
      lbl_staticText.texture_update() 
      textSize = lbl_staticText.texture_size 
      Rectangle(pos=(1024/2 - textSize[0]/2, 600), size=(textSize[0], textSize[1])); #Rectangle with same position and same size 
      lbl_staticText.pos = (1024/2 - textSize[0]/2, 600) 

結果は以下のようになります。あなたが予想されるが、Labelはどちらもセンタリングされていないにも持っていてRectangle位置を水平方向にセンタリングされて見ることができるように

右の高さ位置。

なぜ違いがあるのか​​教えてください。

ありがとうございます!

答えて

1

まず、ラベルのサイズを確認するのを忘れてしまいました。デフォルトの値は常に[100, 100]です。 Labelを子として追加しなかったため、デフォルトで[1, 1]に設定されているsize_hintは無視されます。

最終結果:

  • Labelウィジェットエリアがある[100, 100]
  • Label質感です[something, something](私にとってそれはだ[160, 32]

今、あなたはLabel年代のサイズとRectangleを作成テクスチャのサイズを変更してどこかに置き、Labelを移動して調整します。それらのサイズは異なります。

最後のコメント行のコメントを解除してください。

class MyClass(Widget): 
    ... 

    def _on_keyboard_down(self, keyboard, keycode, text, modifiers): 
     with self.canvas: 
      lbl_staticText = Label(font_size=12)  
      lbl_staticText.text = 'This is some nice random text\nwith linebreak' 
      lbl_staticText.texture_update() 
      textSize = lbl_staticText.texture_size 

      Color(1, 0, 0, 1) 
      Rectangle(
       pos=(100+textSize[0]/2.0, 100), 
       size=(textSize[0], textSize[1]) 
      ) 
      lbl_staticText.pos = (100+textSize[0]/2.0, 300) 
      print(lbl_staticText.size, textSize, lbl_staticText.size == textSize) 
      #lbl_staticText.size=(textSize[0], textSize[1]) # this! 
      Color(0, 1, 0, 1) 
      Rectangle(
       pos=lbl_staticText.pos, 
       size=lbl_staticText.size 
      ) 

runTouchApp(MyClass()) 
+0

ご返信ありがとうございます。 OK、私はtexture_sizeがlabel.sizeと異なることを知らなかった。私はそれが私が見逃す点だと思う。あなたはsize_hintについて言及しました。問題を見てそれと何が問題なの?私は問題に文脈を得ていない。 –

+0

@ S-Man何が起こっているかを見るには['Label.texture_size'](https://kivy.org/docs/api-kivy.uix.label.html#kivy.uix.label.Label.texture_size)を見てください。 'size_hint'については、ウィジェットは、それらの値(主にレイアウト)で動作することができる親に追加された場合、それらの値と共に動作します。 'Label'を' MyClass'の 'canvas'に描画している間に完全に別個のPythonオブジェクトとして作成しました。したがって、parent = no' size_hint'は使われませんでした。 – KeyWeeUsr

関連する問題