2016-12-19 1 views
0

이것이 내 탭 항목의 기본 코드입니다.kivy의 탭 패널에 회 전자 개체를 넣으려고했지만 작동하지 않습니다.

import kivy 
from kivy.app import App 
from kivy.uix.tabbedpanel import TabbedPanel 
from kivy.uix.gridlayout import GridLayout 
Builder.load_string(""" 

<Test>: 
size_hint: .8, .5 
pos_hint: {'center_x': .4, 'center_y': .3} 
do_default_tab: False 

TabbedPanelItem: 
    text: 'Tab 1' 
    Label: 
     text: 'Syntax' 


TabbedPanelItem: 
    text: 'Changeover' 


TabbedPanelItem: 
    text: 'Map' 

""") 


class Test(TabbedPanel): 
pass 


class TabbedPanelApp(App): 
def build(self): 
    return Test() 

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

나는 회 전자를 탭 1에 삽입하고 싶습니다. 어떻게 작동합니까? 이것이 나의 스피너 코드입니다.

from kivy.base import runTouchApp 
from kivy.lang import Builder 
from kivy.factory import Factory 
from kivy.properties import ListProperty, ObjectProperty 
from kivy.uix.dropdown import DropDown 
from kivy.uix.button import Button 
import kivy 
from kivy.app import App 
from kivy.uix.tabbedpanel import TabbedPanel 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.boxlayout import BoxLayout 

class MultiSelectSpinner(Button): 


dropdown = ObjectProperty(None) 


values = ListProperty([]) 


selected_values = ListProperty([]) 


def __init__(self, **kwargs): 
    self.bind(dropdown=self.update_dropdown) 
    self.bind(values=self.update_dropdown) 
    super(MultiSelectSpinner, self).__init__(**kwargs) 
    self.bind(on_release=self.toggle_dropdown) 

def toggle_dropdown(self, *args): 
    if self.dropdown.parent: 
     self.dropdown.dismiss() 
    else: 
     self.dropdown.open(self) 

def update_dropdown(self, *args): 
    if not self.dropdown: 
     self.dropdown = DropDown() 
    values = self.values 
    if values: 
     if self.dropdown.children: 
      self.dropdown.clear_widgets() 
     for value in values: 
      b = Factory.MultiSelectOption(text=value) 
      b.bind(state=self.select_value) 
      self.dropdown.add_widget(b) 

def select_value(self, instance, value): 
    if value == 'down': 
     if instance.text not in self.selected_values: 
      self.selected_values.append(instance.text) 
    else: 
     if instance.text in self.selected_values: 
      self.selected_values.remove(instance.text) 

def on_selected_values(self, instance, value): 
    if value: 
     self.text = ', '.join(value) 
    else: 
     self.text = '' 


kv = ''' 
BoxLayout: 
orientation: 'vertical' 
size_hint: .7, .6 
pos_hint: {'center_x': .3, 'center_y': .7} 
do_default_tab: False 

BoxLayout: 

    Label: 
     text: 'Food Type' 

    MultiSelectSpinner: 
     values: 'Fried Chicken', 'Burger' 

<[email protected]>: 
size_hint: 8, None 
height: '40dp' 


''' 

runTouchApp(Builder.load_string(kv))  

내가 ABIT 포인터를 필요는 내가 코드를 병합 있지만 작동하지 않는 것을 시도하시기 바랍니다. 누군가가 도와 줄 수 있다면 기꺼이

답변

0

나는 사용자 정의 TabbledPanelItem을 만드는 것이 최선이라고 생각합니다. 그리고 나서 그 스피너를 구현하십시오. 내 들여 쓰기를 용서하십시오.

class Mod(TabbedPanelItem): 
    one = ObjectProperty(None) 

def __init__(self,**kwargs): 
    super(Mod,self).__init__(**kwargs) 

def on_touch_down(self, touch): 
    if self.state == 'down': 
     # dispatch to children, not to self 
     for child in self.children: 
      child.dispatch('on_touch_down', touch) 
     return 
    else: 
     super(Mod, self).on_touch_down(touch) 

def on_release(self, *largs): 
    if self.parent: 
     self.parent.tabbed_panel.switch_to(self) 
     print(self.parent.children) 
     lola = MultiSelectSpinner() 
     lola.toggle_dropdown() 


    else: 
     # tab removed before we could switch to it. Switch back to 
     # previous tab 
     self.panel.switch_to(self.panel.current_tab) 
+0

im tryin for good하지만 여전히 작동하지 않습니다. –

관련 문제