2016-12-17 2 views
0

Я пытаюсь поставить данные изображения в GridLayout, который может прокручивать, и когда я выбрать картинку под цвет изменения изображения, вот мой код:Kivy - Добавить виджет (сплиттер) в GridLayout

CONTAINER_PNG = os.path.join(AllImage_ROOT, 'images') 
IMAGES_NAMES = [c[:-4] for c in os.listdir(CONTAINER_PNG)] 

LIST_IM = os.listdir(CONTAINER_PNG) 

class ImageButton(ButtonBehavior, Image): 
    pass 

класс AllImage (BoxLayout):

# screen_manager = ObjectProperty() 

def __init__(self, **kwargs): 
    BoxLayout.__init__(self, **kwargs) 
    self.orientation='vertical' 

    splitter = Splitter(sizable_from = 'bottom') 
    root = ScrollView() 

    layout = GridLayout(cols=4, spacing=10) 
    layout2 = GridLayout(cols=4, spacing=10) 
    button = ImageButton(source = 'mix.png') 
    layout2.add_widget(button) 

    self.add_widget(layout2) 

    for im in IMAGES_NAMES: 
     if IMAGES_NAMES != None : 
      btn = ImageButton(source = im+'.png') 
      btn.bind(on_press= lambda a:layout.add_widget(ToggleButton(text = 'work'))) 
      btn.bind(on_press= lambda b:self.background_color(1,1,1)) 
      layout.add_widget(btn) 

    layout2.add_widget(splitter) 
    root.add_widget(layout) 

    self.add_widget(root) 

класс TryApp (App):

def build(self): 
    return AllImage() 

def on_pause(self): 
    return True 


if __name__ == "__main__": 
    TryApp().run() 

Я знаю, что я делаю что-то неправильно, так У меня есть несколько вопросов:

1- Почему когда я добавить Splitter между моими 2 Сетки он не работает (сплиттер не видно)

2- Как я могу изменить цвет моего ImageButton?

3- Прокрутка не работает на моем GridLayout, как я могу настроить свою сетку, которая может быть больше, чем мое окно.

Спасибо за ваше время :)

ответ

0
  1. kivy пытается сделать вещи простыми, отделяя UI от logic..from в kivy документы, он говорит, Вы должны деактивировать по крайней мере, один из инструкций size_hint (х или у) ребенка, чтобы позволить прокруткой ..

    <AllImage>: 
        orientation:'vertical' 
        ScrollView: 
         do_scroll_x:False 
    
         GridLayout: 
          cols:4 
          spacing:10 
          size_hint_y:None 
          height: 8*dp(80) 
    

ради ясности, попытаться реализовать питания пользовательского интерфейса в файле кв, чтобы сделать вещи легче читать.

btn.bind(on_release= lambda a:layout.add_widget(ToggleButton(text = 'work'))) 
btn.bind(on_press= lambda b:self.background_color(1,1,1)) 

я не думаю, что on_press может обрабатывать два методы в Sametime, так что попробуйте это

+0

Вы ответили один из моих вопросов, спасибо !! Однако, что касается цвета фона, проблема в том, что я не могу изменить цвет, цвет фона класса, который я создал ImageButton. У вас есть идея, как я могу это сделать? Потому что 'self.background_color (1,1,1)' не работает. Thanks –

+0

Вы уже используете изображение, и я не думаю, что вы можете изменить цвет фона, я считаю его лучшим, если вы реализуете background_normal и свойство background_down кнопки, в которой вы можете использовать изображение для реализации –

+0

, вы уже используете изображение, и я не думаю, что вы можете изменить цвет фона, я считаю его лучшим, если вы реализуете background_normal и свойство background_down кнопки , который вы можете использовать для реализации изображения –