gpt4 book ai didi

python - 如何在 python 中引用 Kivy Canvas

转载 作者:行者123 更新时间:2023-12-02 03:20:43 25 4
gpt4 key购买 nike

如果 UI 是用 kv 构建的,我如何引用 Kivy Canvas 来从 python 文件中绘图,例如这是我的 .py:

# canvasCallApp.py...

from kivy.app import App

class canvasCallApp(App):
pass

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

还有我的.kv:

# canvasCallApp.kv...

BoxLayout:
id: left_box
canvas:
Color:
rgb: 0.6, 0.6, 0.6
Rectangle:
pos: self.pos
size: self.size
Widget:
size_hint_x: None
width: left_box.width - right_box.width
BoxLayout:
width: 200
id: right_box
Button:
text: 'I ma a button'

产生:

enter image description here

如何从 python 访问 left_box 中的 Canvas 进行绘图?无法从文档中弄清楚。

最佳答案

如果您愿意动态更改 Canvas 的颜色或大小,

我建议使用 Kivy Properties。

这是代码。

from kivy.properties import ListProperty
from kivy.lang import Builder
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout


class RootLayout(BoxLayout):
canvas_color = ListProperty([0, 1, 1])


class canvasCallApp(App):
def build(self):
return kv


kv = Builder.load_string('''
RootLayout:
id: left_box
canvas:
Color:
rgb: root.canvas_color
Rectangle:
pos: self.pos
size: self.size
Widget:
size_hint_x: None
width: left_box.width - right_box.width
BoxLayout:
width: 200
id: right_box
Button:
text: 'I ma a button'
''')


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

我还建议使用 RootLayout,这样可以更轻松地通过 root.variable_name 从 Python 代码引用变量。

如果你想改变 Canvas 的背景,也可以将kivy代码改为

canvas:
Color:
rgb: root.canvas_color
Rectangle:
pos: self.pos
size: self.size
source: root.image_path

通过这种方式,您可以从 kivy.properties 导入 StringProperty 并应用相同的功能。随着image_path的值改变,背景自动改变。

如果你想直接访问canvas以便重绘canvas,可以使用with canvas

from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import Rectangle, Color

class SomeBoxLayout(BoxLayout)
def __init__(self, **kwargs):
super(SomeBoxLayout, self).__init__(**kwargs)

with self.canvas:
Color(1, 0, 0, 1) # set the color to red
self.rect = Rectangle(pos=self.center,
size=(self.width/2.,
self.height/2.))

def redraw(self):
self.canvas.clear()
with self.canvas:
Color(0, 0, 1, 1) # set the color to blue
self.rect = Rectangle(pos=self.center,
size=(self.width/2.,
self.height/2.))

请注意,在再次绘制某些内容之前,您应该执行 canvas.clear() 操作。

另外,您可以通过这种方式将与 self.canvas.before 与 self.canvas.after 一起使用。

关于python - 如何在 python 中引用 Kivy Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com