2016-11-10 10 views
0
from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.uix.scatterlayout import ScatterLayout 

class ZoomWidget(ScatterLayout): 
    def __init__(self, **kwargs): 
     super(ZoomWidget, self).__init__(**kwargs) 
     self.add_widget(Label(text='Label')) 

    def on_touch_down(self, touch): 
     if touch.is_double_tap: 
      button = Button(text='Button') 
      self.add_widget(button) 
      return True 
     else: 
      return super().on_touch_down(touch) 


class ZoomSpaceApp(App): 
    def build(self): 
     return ZoomWidget() 


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

を行い、ラベルが動作しているようですが、私は第2のタッチ位置を作成する(デスクトップOS上)を右クリックすることができ、その後、&はラベルを回転させるドラッグスケールを残しました。しかし、ボタンはレイアウト全体をいっぱいにしているように見えます。では、ScatterLayout内でLabelがデフォルトで動作するように、Buttonをどのように動作させるのですか?KivyのScatterLayoutに小さなボタンを追加するにはどうすればよいですか?ラベルは、自動の作品ボタンはそうではない

また、私は他のウィジェットを使って同様のことをしたいので、最も一般的な答えがあります。たとえば、レイアウトなど、いくつかのタイプのウィジェットでButtonをカプセル化しますか? ZoomWidgetに表示されるものは、他のウィジェットになります。私のアプリケーションのポイントは、ユーザーがタッチで独自のアプリケーションを作成し、そこに配置するものを決定することです(最初はコンテキストメニューを使用します)。それを知っている、これにアプローチするより良い方法はありますか?

答えて

1

Buttonはタッチでも機能するため、機能しません。したがって、すべてのタッチを食べる可能性が高く、ScatterLayoutは動作させません。それを稼働させるには、ScatterLayoutに属するエリアだけが必要です。これは、ユーザーが作業することができます。

Buttonと同じように、Labelは接触しないため、最初のウィジェット、つまりこの場合はScatterLayoutにタッチします。

def on_touch_down(self, touch): 
    if touch.is_double_tap: 
     button = Button(text='Button', size_hint=(0.9, 0.9)) 
     self.add_widget(button) 
     return True 
    else: 
     return super(ZoomWidget, self).on_touch_down(touch) 
関連する問題