2017-05-29 61 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

另一種方式是按鈕手動添加到窗口。但隨後你將不得不處理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