python - Kivy 创建小部件的新实例

标签 python widget instance kivy

我是 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/

相关文章:

c++ - 如何在 C++ 中将类的实例与 char * 变量进行比较?

ios - 从 Swift 中的类实例获取类型

java - 当实例在另一个文件中声明时访问 GUI 文件中的实例

python - 解释 Python 文档第 4.4 节

python - 无法从 cron 作业中找到 dotenv 环境变量

python Pandas : extract data from a cell and turn it into a column

gridview - flutter - 在 gridview 上换行时如何设置宽度?

python - 如何让 Pyflakes 忽略一条语句?

qt - Qt中Qwidget的高度和宽度的度量单位是什么

ios - 重命名今日小部件标题