【问题标题】:I want to dynamically change the color of widget in grid Layout in kivy我想在kivy的网格布局中动态更改小部件的颜色
【发布时间】:2014-04-01 07:15:25
【问题描述】:

我想动态更改网格布局中小部件的颜色。
我怎样才能做到这一点? 我创建了一个 6x6 的小部件矩阵,我需要动态闪烁网格布局中的图块。

【问题讨论】:

    标签: python-2.7 opengl kivy


    【解决方案1】:

    尝试创建网格小部件,然后使用预定功能更改小部件的颜色。下面的代码现在可能很完美,但可能会对您有所帮助:

    from kivy.app import App
    from kivy.uix.gridlayout import GridLayout
    from kivy.uix.button import Button
    from kivy.graphics import Color
    from kivy.clock import Clock
    import random
    
    
    class RootWidget(GridLayout):
        pass
    
    class MainApp(App):
    
        def build(self):
            parent = GridLayout(cols=6)
            Colour=[0,0,0,0]
            self.create_button(parent,Colour,1,1)
            Clock.schedule_interval(lambda a:self.update(parent), 1)
            return parent
    
        def update(self,obj):
            print "I am update function"
            obj.clear_widgets()
            print "random value is ",random.random()
            for i in (1,2,3,4,5,6):
                for j in (1,2,3,4,5,6):
                    c=[random.random(),random.random(),random.random(),random.random()]
                    d=[i,j]
                    self.create_button(obj,c,i,j)
    
        def create_button(self,obj,color,i,j):
    
            a=Button(background_color=color,text='Hello World %s%s'%(i,j))
            obj.add_widget(a)
    
    
    
    
    if __name__ == '__main__':
        MainApp().run()
    

    【讨论】:

    • 这样每次都会清除并重新创建所有的小部件,效率很低。它提供了正确的视觉效果,但每次只重置按钮的background_color 会好很多。
    • @inclement ...是的,这样会更有效率。在你的更新函数 def update(self,obj): print "I am update function" for child in obj.children: c=[0,random.random(),1,random.random( ) child.background_color=c
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 2017-04-21
    • 2021-10-24
    • 2012-10-11
    相关资源
    最近更新 更多