Python Kivy问题:移动画布对象

2024-05-15 07:49:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在尝试更新画布中的项目时运行不同方面之后。对象拒绝在画布内移动,即使我有对象本身的引用,我也无法设置其位置。我在这里提供的代码部分似乎是唯一真正的问题。它在屏幕上运行,得到一个小部件,小部件包含一个画布和标签。我能够毫无问题地浏览标签,画布对象也是如此。唯一的区别是我不能重新定位画布对象,但我对标签没有任何问题

是否有特殊的属性或方法来更新或更改画布对象的位置? 我尝试过使用ask_update()、draw()、标记移动的对象等。我不确定为什么它不起作用

         if type(obj).__name__ == DonateButton.__name__:
            cnv_items = [child for child in obj.canvas.children]
            for cnv_obj in cnv_items:
                if type(cnv_obj).__name__ in [Ellipse.__name__, RoundedRectangle.__name__]:
                    cnv_obj.pos = (0,0)

Tags: 项目对象代码nameinchildobjfor
1条回答
网友
1楼 · 发布于 2024-05-15 07:49:27

您可以使用canvasgroup指令动态更改其对象的属性。下面的示例显示了一个canvas下的RectangleEllipse对象,其中canvas属性随随机生成的数字而变化:

from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
import random

APP_KV = """
<CanvasTest>:
    canvas:
        Color:
            rgba: 0, 1, 0, 1
        Rectangle:
            group: 'rectangle'
            size: 400, 200
            pos: self.pos
        Color:
            rgba: 1, 0, 0, 1
        Ellipse:
            group: 'ellipse'
            size: 200, 100
            pos: self.pos
"""

class CanvasTest(BoxLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        Clock.schedule_interval(self.test_pos, 1)
        
    def test_pos(self, *args):
        self.canvas.get_group('rectangle')[0].pos = random.randrange(1, Window.width - 400), random.randrange(1, Window.height - 200)
        self.canvas.get_group('ellipse')[0].pos = random.randrange(1, Window.width - 200), random.randrange(1, Window.height - 100)

class MainApp(App):
    def build(self):
        self.root = Builder.load_string(APP_KV)
        return CanvasTest()

if __name__ == '__main__':
    MainApp().run()

相关问题 更多 >