2017-05-09 63 views
1

我真的是新的基維和我試圖在畫布上放置一些文本,但我發現我使用的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) 

結果是這樣的:

正如你可以看到如預期的那樣Rectangle位置水平居中,但Label既不中心也有正確的高度位置。

請你能告訴我爲什麼有區別嗎?

謝謝!

回答

1

好吧,你忘了檢查首先標籤的大小。默認的一個總是[100, 100]。作爲孩子,您沒有在任何地方添加Label,因此它忽略了size_hint,默認設置爲[1, 1]

最終結果是:

  • Label按鈕區是[100, 100]
  • Label質地[something, something](對我來說這是[160, 32]

現在你創建一個RectangleLabel的大小紋理大小並將其放置在某處,然後移動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

感謝您的回覆。好吧,我不知道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',那麼,如果一個小部件被添加到可以使用這些值(主要是佈局)的父項中,那麼它將與這些值一起工作。在繪製「MyClass」的'canvas「時,您將'Label'創建爲完全獨立的Python對象,因此不使用parent = no'size_hint'。 – KeyWeeUsr

相關問題