2017-06-02 10 views
0

は、簡単なチュートリアルアプリを見てみましょう...kivy - 散布

from kivy.app import App 

from kivy.uix.label import Label 
from kivy.uix.scatter import Scatter 
from kivy.uix.floatlayout import FloatLayout 

class Main(App): 

    def build(self): 

     f = FloatLayout() 
     s = Scatter() 
     l = Label(text="Error?", 
         font_size=150 
        ) 

     s.add_widget(l) 
     f.add_widget(s) 
     return f 

if __name__ == '__main__': 
    Main().run() 

たぶん、これは、移動、サイズ変更、回転させることができるアプリにラベルを追加するための奇妙なヒットボックス... I に移動し、サイズを変更して回転させますが、ヒットボックスは移動しているようです。

I.e.ラベルの上またはラベルの左にある[WAY]をクリックできますが、ラベルの左のサイズが応答しません。enter image description here

これは意図した動作とは異なります。

どこが間違っていますか? /これはどのように修正するのですか?

Windows 10のPython 3.6で動作している、btw。

コンソール出力:

[INFO ] [Python  ] v3.6.0 |Anaconda custom (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)] 
[INFO ] [Logger  ] Record log in C:\Users\user1291\.kivy\logs\kivy_17-06-02_48.txt 
[INFO ] [Kivy  ] v1.10.0 
[INFO ] [Factory  ] 194 symbols loaded 
[INFO ] [Image  ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored) 
[INFO ] [Text  ] Provider: sdl2 
[INFO ] [OSC   ] using <thread> for socket 
[INFO ] [Window  ] Provider: sdl2 
[INFO ] [GL   ] Using the "OpenGL" graphics system 
[INFO ] [GL   ] GLEW initialization succeeded 
[INFO ] [GL   ] Backend used <glew> 
[INFO ] [GL   ] OpenGL version <b'4.4.0 - Build 21.20.16.4590'> 
[INFO ] [GL   ] OpenGL vendor <b'Intel'> 
[INFO ] [GL   ] OpenGL renderer <b'Intel(R) HD Graphics 620'> 
[INFO ] [GL   ] OpenGL parsed version: 4, 4 
[INFO ] [GL   ] Shading version <b'4.40 - Build 21.20.16.4590'> 
[INFO ] [GL   ] Texture max size <16384> 
[INFO ] [GL   ] Texture max units <32> 
[INFO ] [Shader  ] fragment shader: <b"WARNING: 0:7: '' : #version directive missing"> 
[INFO ] [Shader  ] vertex shader: <b"WARNING: 0:7: '' : #version directive missing"> 
[INFO ] [Window  ] auto add sdl2 input provider 
[INFO ] [Window  ] virtual keyboard not allowed, single mode, not docked 
[INFO ] [Base  ] Start application main loop 
[INFO ] [GL   ] NPOT texture support is available 
[INFO ] [Base  ] Leaving application in progress... 

答えて

1

この正しい動作ですが、それだけで、明示的ではありません。デフォルトでは、ウィジェットはその親のサイズを仮定します。つまり、あなたのFloatLayoutはApp(画面全体)のサイズ、ScatterはFloatLayoutのサイズ、LabelはScatterのサイズです。したがって、ラベルのサイズはアプリケーションのサイズと同じです。 「意図した行動」については

は、あなたはそれをsize_hint=(None, None)を与えることによって、あなたのラベルのサイズを設定する必要があります(レイアウトはデフォルトでsize_hintを使用して、あなたのために自動的にサイズを設定)し、その後、あなたはsize=(x, y)でサイトを手動で設定することができます。私は散布がどのように大きな示すために赤でキャンバスを追加する方法

from kivy.app import App 
from kivy.lang import Builder 

class Main(App): 

    def build(self): 
     return Builder.load_string(""" 
FloatLayout: 
    Scatter: 
     id: s  
     canvas.before: 
      Color: 
       rgb: 1, 0, 0 
      Rectangle: 
       size: self.size 

     Label: 
      id: l 
      text: "Error?" 
      font_size: 150 
""") 

if __name__ == '__main__': 
    Main().run() 

注:

はここで遊ぶために少しのコードです。これで、スキャッタのサイズを変更して何が起こるかを見ることができます。同じcanvas.before: ...をラベルに追加できますが、その色は変更できます。それからあなたは論理的な推論を見始めるでしょう、なぜそれがとても奇妙に見えたのでしょう。

は、私は本当にあなたが何が起こっているかを把握お勧めします、一方、ここにあなたが本当に動けなくなる場合には、この正確な問題のための完全なソリューションです:

from kivy.app import App 
from kivy.lang import Builder 

class Main(App): 

    def build(self): 
     return Builder.load_string(""" 
FloatLayout: 
    Scatter: 
     size_hint: None, None 
     size: l.texture_size 

     Label: 
      id: l 
      text: "Error?" 
      size: self.texture_size 
      font_size: 150 
""") 

if __name__ == '__main__': 
    Main().run() 
+0

これは何もしていないようだ - 少なくとも、または私はそれを試す方法ではありません。あなたは例を挙げることができますか? – User1291

+0

私はあなたの周りで遊ぶことができ、デバッグするいくつかのコードを含めるために私の答えを編集しました。それ以外は、公式ドキュメントのスキャッタとレイアウトについて読むことができます。希望が役立ちます。 –