kivy - Kivy:绘制到小部件
问题描述
我收集了 kivy 的经验,但我在使用小部件中心时遇到了问题。我的问题显示下一个脚本:
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.app import App
from functools import partial
from kivy.graphics import Color, Ellipse
class CanvasApp(App):
def draw(self,wid, color):
with wid.canvas:
Color(color[0], color[1], color[2])
Ellipse(size= (100, 100), pos=(wid.center_x, wid.center_y))
return
def painter(self, wid, *largs):
self.draw(wid, (0, 1, 0))
return
def build(self):
wid = Widget()
btn_painter = Button(text='Painter',
on_press=partial(self.painter, wid))
ctrl = BoxLayout(size_hint=(1, None), height=50)
ctrl.add_widget(btn_painter)
root = BoxLayout(orientation='vertical')
root.add_widget(wid)
root.add_widget(ctrl)
self.draw(wid, (1, 0, 0))
return root
if __name__ == '__main__':
CanvasApp().run()
我想在不使用按钮画家的情况下在小部件中心(黑色矩形)绘制圆圈。我无法获得中心的实际中心坐标。如果不使用按钮,则只有默认中心坐标可用。OK流程是怎样的?谢谢你的回答。
解决方案
问题是方法wid
内部尚未设置大小和位置build()
。所以你需要延迟draw()
一点调用。尝试将调用替换为draw()
:
Clock.schedule_once(partial(self.draw, wid, (1,0,0)))
您还需要draw()
稍微更改方法以处理dt
添加的参数:
def draw(self,wid, color, *args):
推荐阅读
- laravel - laravel 护照多重认证有问题
- mysql - mysql 在过去 N 小时内的简单移动平均线
- sql - 统计堆栈交换数据库中具有相同 AnswerCount 值的单个匹配记录的数量
- python - Lambda 表达式 (Python)
- html - 如何让我隐藏的 div 显示在下拉菜单中
- mysql - 检索 MySQL 中不具有 NULL 或特定值的属性
- javascript - 如何在 Discord.js 中获得角色?
- c++ - 这个声明真的改变了错误所说的意思吗?
- c - 非常量变量的正确术语
- php - 类 Illuminate\Validation\Rules\RequiredIf 的对象无法转换为 int