我是 Kivy 的新手,有几个关于小部件的问题。 几个月前我开始和 Kivy 打交道。我已经阅读了一些文档,但我可能遗漏了很多内容。
是否可以创建具有自己属性的同一小部件类的多个实例?
我的目标是拥有几个可以调整大小并独立拖动的矩形。
我正在上 Java 类(class),所以我将与我在该类(class)中学到的内容进行比较: 例如,假设我有一个基本的 rect.java 类设置为接受宽度和高度的两个变量。
因此,在我的主 .java 代码文件中,我将编写如下内容来创建矩形类的几个实例:
rect s1 = new rect(2,3); // width & height
rect s2 = new rect(5,4);
然后,s1.height 和 s2.height 将具有不同的值。
是否有可能在 Kivy 中实现类似的东西?现在,我的 .kv 文件中设置了许多具有相同属性的类:
<rect1>:
canvas:
Color:
rgba: 1, 0, 1, 0.5
Rectangle:
pos: root.center_x - root.width/2,root.center_y - root.height/2
size: self.size
<rect2>:
canvas:
Color:
rgba: 1, 1, 0, 0.5
Rectangle:
pos: root.center_x - root.width/2,root.center_y - root.height/2
size: self.size
<rect3>:
canvas:
Color:
rgba: 0, 1, 0, 0.5
Rectangle:
pos: root.center_x - root.width/2,root.center_y - root.height/2
size: self.size
我已经在我的 .py 文件中编写了代码,可以调整它的大小并四处拖动。现在,我复制/修改了代码以与每个其他类一起使用。
现在,如果我使用:
Window.add_widget(rect1)
它将直接在旧实例之上创建一个新实例,但它们仍然共享相同的坐标和其他属性等。如果我用鼠标拖动,该类的所有实例都遵循相同的坐标。再一次,我的目标是拥有多个可以调整大小和独立拖动的矩形。
最佳答案
Window
应该只有一个小部件(应用程序根小部件)。最好通过从 App.build()
返回根小部件实例或通过在应用的 kv 文件中包含根小部件来自动添加此小部件。
在这种情况下,FloatLayout
最有意义。
此外,您还可以使用 Scatter
小部件来处理变换 - 移动(平移)、调整大小和旋转 - 这可能比自己动手更容易。只需将每个小部件包装在 Scatter
中,或者让您的小部件扩展 Scatter
。
关于python - Kivy 创建小部件的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26415878/