2017-05-29 12 views
0

ボタンをクリックしてMDFloatingActionButtonウィジェットを追加しようとしていますが、取得できません。Kivy - 他にMDFloatingActionButtonを追加する

誰かがこの問題を解決するのに役立ちます。

目的は、アイコンプラスでFABをクリックした後にボタンのリストを作成することです。

多くの方法でadd_widget()にコードを追加しようとしましたが、機能しませんでした。

fab.py

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.properties import NumericProperty 
from kivymd.theming import ThemeManager 
from kivymd.time_picker import MDTimePicker 
from kivymd.button import MDFloatingActionButton 
from kivy.animation import Animation 
from kivy.core.window import Window 

Window.clearcolor = (1, 1, 1, 1) 

class MDFloatingActionButtonList(MDFloatingActionButton): 
    angle = NumericProperty(0) 
    def on_touch_up(self, touch): 
     if self.collide_point(*touch.pos): 
      if self.angle == 0: 
       self.angle += 45 
       #MDFloatingActionButton.add_widget() 
      else: 
       self.angle -= 45 

class Fab(App): 
    theme_cls = ThemeManager() 
    def build(self): 
     return MDFloatingActionButtonList()  

Fab().run() 

fab.kv

<MDFloatingActionButtonList>: 
    canvas.before:                                    
     PushMatrix                                    
     Rotate:                                     
      angle: self.angle                                 
      axis: (0, 0, 1)                                  
      origin: self.center                                 
    canvas.after:                                    
     PopMatrix 
    MDFloatingActionButton: 
     id: float_act_btn 
     icon: 'plus' 
     opposite_colors: True 
     elevation_normal: 8 
     pos_hint: {'center_x': 0.5, 'center_y': 0.2} 

結果:例えば

enter image description here

目標:

enter image description here

答えて

1

ああ、これは難しいものです。 KivyMDプロジェクトは、設計がとても美しいものの、文書化されていません。

from kivy.app import App 
from kivy.core.window import Window 
from kivy.uix.boxlayout import BoxLayout 

from kivymd.button import MDFloatingActionButton 
from kivymd.menu import MDDropdownMenu 
from kivymd.theming import ThemeManager 

Window.clearcolor = (1, 1, 1, 1) 

menu_items = [ 
    {'viewclass': 'MDFloatingActionButton', 
    'text': 'Example', 
    'on_press': lambda: print("Hello")}, 
    {'viewclass': 'MDFloatingActionButton', 
    'text': 'Example'}, 
    {'viewclass': 'MDFloatingActionButton', 
    'text': 'Example'}, 
    {'viewclass': 'MDFloatingActionButton', 
    'text': 'Example item'}, 
    {'viewclass': 'MDFloatingActionButton', 
    'text': 'Example'}, 
    {'viewclass': 'MDFloatingActionButton', 
    'text': 'Example'}, 
    {'viewclass': 'MDFloatingActionButton', 
    'text': 'Example'}, 
] 


class Fab(App): 
    theme_cls = ThemeManager() 
    layout = BoxLayout() 
    md = MDDropdownMenu(items=menu_items) 

    def build(self): 
     button = MDFloatingActionButton() 
     self.layout.add_widget(button) 
     button.bind(on_press=lambda x: self.md.open(button)) 
     return self.layout 


Fab().run() 

Pretty ugly

もう一つの方法は、手動でウィンドウにボタンを追加することです:

[OK]を、ここではそれがどのように見えるかの一例です。しかし、その後、あなたは(私はそれを実装していませんでした)dissmissを処理する必要があります:

from kivy.app import App 
from kivy.core.window import Window 

from kivymd.button import MDFloatingActionButton 
from kivymd.theming import ThemeManager 

Window.clearcolor = (1, 1, 1, 1) 


class Fab(App): 
    theme_cls = ThemeManager() 
    button = None 

    def build(self): 
     self.button = MDFloatingActionButton() 
     self.button.bind(on_press=lambda x: self.open_menu(self.button)) 
     return self.button 

    def open_menu(self, instance): 
     x, y = instance.to_window(instance.x, instance.center_y) 

     for i in range(1, 5): 
      Window.add_widget(MDFloatingActionButton(center_y=y+100*i, x=x)) 


Fab().run() 

Manually adding to a window

関連する問題