Python Kivy - 问题移动 canvas 对象
Python Kivy - Issue moving canvas objects
在 运行 之后尝试更新 canvas 中的项目的不同方面。对象拒绝在 canvas 内移动,即使我有对对象本身的引用我也无法设置它的位置。我在这里提供的代码部分似乎是唯一真正的问题。它通过屏幕运行获取一个小部件,该小部件包含一个 canvas 和标签。我能够毫无问题地浏览标签,并且与 canvas 对象相同。唯一的区别是我无法重新定位 canvas 对象,但标签问题为零。
是否有特殊的属性或方法来更新或更改 canvas 对象的位置?
我试过使用 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)
您可以使用 canvas
的 group
指令动态更改其对象的属性。下面是一个示例,显示 Rectangle
和 Ellipse
对象在一个 canvas
下,并使用随机生成的数字更改 pos
属性:
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()
在 运行 之后尝试更新 canvas 中的项目的不同方面。对象拒绝在 canvas 内移动,即使我有对对象本身的引用我也无法设置它的位置。我在这里提供的代码部分似乎是唯一真正的问题。它通过屏幕运行获取一个小部件,该小部件包含一个 canvas 和标签。我能够毫无问题地浏览标签,并且与 canvas 对象相同。唯一的区别是我无法重新定位 canvas 对象,但标签问题为零。
是否有特殊的属性或方法来更新或更改 canvas 对象的位置? 我试过使用 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)
您可以使用 canvas
的 group
指令动态更改其对象的属性。下面是一个示例,显示 Rectangle
和 Ellipse
对象在一个 canvas
下,并使用随机生成的数字更改 pos
属性:
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()