【问题标题】:Kivy - Add widget(Splitter) to a GridLayoutKivy - 将小部件(拆分器)添加到 GridLayout
【发布时间】:2016-12-19 06:25:51
【问题描述】:

我正在尝试将给定的图片放在可以滚动的网格布局中,当我选择图片时,图片的颜色会发生变化,这是我的代码:

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- 为什么当我在我的 2 个网格之间添加一个拆分器时它不起作用(拆分器不可见)

2- 如何更改 ImageButton 的颜色?

3- 滚动视图在我的 GridLayout 上不起作用,我如何自定义比我的窗口更大的 Grid。

感谢您的宝贵时间:)

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:
    1. kivy 试图通过将 UI 与逻辑分开来使事情变得简单……从 kivy 文档中,它说您必须停用子项的至少一个 size_hint 指令(x 或 y)才能启用滚动……

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

    为了清楚起见,尝试在 kv 文件中实现 UI 内容以使内容更易于阅读。

    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 可以同时处理两种方法,所以试试这个

    【讨论】:

    • 您回答了我的一个问题,谢谢!但是,关于背景颜色,问题是我无法更改我创建的 ImageButton 类的颜色和背景颜色。你知道我该怎么做吗?因为self.background_color(1,1,1) 不工作.. 谢谢
    • 您已经在使用图像,我认为您无法更改背景颜色,我认为最好实现按钮的 background_normal 和 background_down 属性,您可以使用图像来实施
    • 您已经在使用图像,我认为您无法更改背景颜色,我认为最好实现按钮的 background_normal 和 background_down 属性,您可以使用图像来实施
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多