python – 小部件在GridLayout中的位置

python – 小部件在GridLayout中的位置,第1张

概述我正在尝试创建一个小部件网格,每个“单元格”小部件都有一个矩形我可以改变以后的颜色.当我使用grid.add_widget(Button(text = str(i))行运行下面的代码时,按钮会填充窗口(如文档中所示).但是,当我在grid.add_widget(Cell())中使用我的Cell小部件时,所有小部件都在左下角聚集(position = [0,0],size = [100,100]). 我正在尝试创建一个小部件网格,每个“单元格”小部件都有一个矩形我可以改变以后的颜色.当我使用grID.add_Widget(button(text = str(i))行运行下面的代码时,按钮会填充窗口(如文档中所示).但是,当我在grID.add_Widget(Cell())中使用我的Cell小部件时,所有小部件都在左下角聚集(position = [0,0],size = [100,100]).我发现这个问题 Kivy: Add raw Widget to GridLayout (as opposed to Image,Button,etc)并改变我的Cell类继承布局而不是Widget,但这没有帮助.关于我做错了什么的任何想法?我想要的是一个彩色矩形网格.

版本

[INFO   ] [Kivy        ] v1.9.1[INFO   ] [Python      ] v2.7.6 (default,Jun 22 2015,17:58:13)

from kivy.app import Appfrom kivy.core.window import Windowfrom kivy.uix.Widget import Widgetfrom kivy.uix.button import buttonfrom kivy.uix.grIDlayout import GrIDLayoutfrom kivy.uix.layout import Layoutfrom kivy.graphics import Rectangle,colorXSIZE=2YSIZE=2class Cell(Layout):    def __init__(self,*args,**kwargs):        super(Cell,self).__init__(*args,**kwargs)        with self.canvas:            Rectangle(size=self.size,pos=self.pos)            color((0.2,0.2,1.0))class GameApp(App):    def build(self):        grID = GrIDLayout(rows=YSIZE,cols=XSIZE,size=Window.size)        for i in xrange(4):            print 'i={}'.format(i)#            grID.add_Widget(Cell())            grID.add_Widget(button(text=str(i)))        return grIDif __name__ == '__main__':    GameApp().run()
解决方法 我将展示一个如何实现这一目标的例子.
我将创建一个网格类,并将单元格小部件添加到它.
但我只会使用一个画布(grIDlayouts画布).
所以单元格类将包含一个 InstructionGroup,而不是制作多个画布.
为了能够在以后设置每个单元格的大小,位置和颜色,这些属性必须是单元格类的属性.
属性将在MyGrID的set_attributes方法中设置.
首先,当应用程序运行时,您可以获取单元格的位置,因此我使用Clock.schedule_once方法.这将执行下一帧.
为了演示如何更改颜色,我创建了一个Clock.schedule_interval,用随机颜色为单元格的颜色设置动画.

所以这是一个例子:

from kivy.app import Appfrom kivy.uix.Widget import Widgetfrom kivy.uix.button import buttonfrom kivy.uix.grIDlayout import GrIDLayoutfrom kivy.graphics import Rectangle,color,InstructionGroupfrom kivy.clock import Clockfrom random import uniformXSIZE=2YSIZE=2class Cell(Widget):    def __init__(self,i,self).__init__(**kwargs)        self.ig = InstructionGroup()        self.rect = Rectangle()        self.color = color(0.2,0.2*i)        self.ig.add(self.color)        self.ig.add(self.rect)class MyGrID(GrIDLayout):    def __init__(self,**kwargs):        super(MyGrID,self).__init__(**kwargs)        self.rows=YSIZE        self.cols=XSIZE        for i in xrange(4):            self.add_Widget(Cell(i))            self.canvas.add(self.children[0].ig)        Clock.schedule_once(self.set_attributes)        Clock.schedule_interval(self.change_color,1)    def set_attributes(self,dt):        for i in self.children:            i.rect.pos = i.pos            i.rect.size = i.size    def change_color(self,dt):        for i in self.children:            i.color.rgb = (uniform(0.0,1.0),uniform(0.0,1.0))class GameApp(App):    def build(self):        return MyGrID()if __name__ == '__main__':    GameApp().run()
总结

以上是内存溢出为你收集整理的python – 小部件在GridLayout中的位置全部内容,希望文章能够帮你解决python – 小部件在GridLayout中的位置所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存