2016-12-01 4 views
1

Я не могу понять, почему флажки не работают в ScrollView. Следующий код и .kv-файл не позволяют отмечать флажки, если я не удалю ScrollView.Kivy checkboxes не работает в ScrollView

from kivy.app import App 
from kivy.uix.screenmanager import (ScreenManager, Screen) 
from kivy.uix.scrollview import ScrollView 


class MainManager(ScreenManager): 
    pass 

class Scrolling(ScrollView): 
    pass 

class LoginScreen(Screen): 
    pass 

class QuestionApp(App): 
    def build(self): 
     AppSM = MainManager() 
     AppSM.add_widget(LoginScreen(name='login')) 
     return AppSM 

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

и файл .kv

<LoginScreen>: 
    Scrolling: 
     GridLayout: 
      cols: 1 
      padding: 15 
      spacing: 50 
      size_hint_y: None 
      height: self.minimum_height 
      Button: 
       size_hint_y: None 
       height: '200sp' 
      BoxLayout: 
       orientation: 'horizontal' 
       CheckBox: 
        active: False 
       CheckBox: 
        active: True 
<Scrolling>: 
    do_scroll_x: False 
    bar_margin: 0 
    bar_width: 15 
    bar_color: [.7,.7,.7,.9] 
    bar_inactive_color: [.7,.7,.7,.9] 
    scroll_type: ['bars','content'] 

Если изменить <LoginScreen>: к следующему, удалению прокрутки, флажки работать нормально:

<LoginScreen>: 
    GridLayout: 
     cols: 1 
     padding: 15 
     spacing: 50 
     Button: 
      size_hint_y: None 
      height: '200sp' 
     BoxLayout: 
      orientation: 'horizontal' 
      CheckBox: 
       active: False 
      CheckBox: 
       active: True 

ответ

1

Измените файл kv на это:

BoxLayout: 
    size_hint_y: None 
    height: 200 
    orientation: 'horizontal' 
    CheckBox: 
     active: False 
    CheckBox: 
     active: True 

, тогда CheckBox работает (по крайней мере, для меня). Причина, по которой, скорее всего, из-за явно заявленной высоты, которую я думаю, GridLayout ожидает, когда вы установите height: self.minimum_height.

+0

Это сработало. Немного сбив с толку, поскольку я предположил, что self.minimum_height из GridLayout был для общего размера самого макета, который должен содержать каждый элемент, и что каждый элемент будет занимать как минимум свой размер по умолчанию, - но просматривая документы, кажется, флажки don У меня есть размер по умолчанию, тогда как другие виджеты - поэтому, почему кнопки работали. – Daniel

+1

@ Daniel у них действительно есть размер по умолчанию, как и любой другой виджет, который наследуется от класса Widget -> '[100, 100]', проблема в том, что 'size_hint' имеет более высокий приоритет. Даже 'size_hint_y: None' делает вещь. – KeyWeeUsr