gpt4 book ai didi

python - 了解 Kivy 中的小部件

转载 作者:行者123 更新时间:2023-11-28 22:02:10 25 4
gpt4 key购买 nike

我是一名新手程序员,目前正在学习使用 kivy 作为 GUI 平台的 python。

我正在阅读 kivy 手册并正在研究小部件。我想在 tutorial painter widget 上尝试一些东西,但经过几个小时的尝试,我还是失败了。

我想要的应该很简单。我有一个小部件,它在触摸屏幕后创建一条随机线。我觉得在某个区域触摸屏幕后自动重复添加线条会很有趣。所以我做了一个函数,不断向小部件“注入(inject)”数据以创建更多行。

但我根本无法与小部件“通信”。我不知道小部件“实例”名称是什么。所以我通过将其命名为 painter 创建了实例,好吧,让我们分享代码:

import kivy
import time
from random import random
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.widget import Widget
from kivy.graphics import Color, Ellipse, Line


class MyPaintWidget(Widget):
def on_touch_down(self, touch,):
with self.canvas:
Color(random(), random(), random())
touch.ud['Line'] = Line(points=(touch.x, touch.y))
touch.ud['Line'].points += [random()*1000, random()*1000 ]
begin()

def touchme():
touch.ud['Line'].points += [random()*1000, random()*1000 ]
print 'touchme'

class MyPaintApp(App):
def build(self):
painter = MyPaintWidget()
return painter

def begin():
def my_callback(dt):
print 'begin'
painter.touchme()
Clock.schedule_interval(my_callback, 1.)


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

希望有人能为我提供如何做到这一点的答案,并可能向我解释一下小部件的工作原理。我将其视为 Python 中的标准类,但我认为它的工作原理与此略有不同。

干杯。

最佳答案

不确定我是否理解你想要实现的目标,但我想你可以将代码从 begin 方法移动到 on_touch_down 方法中,使后者看起来像这样:

def on_touch_down(self, touch):
with self.canvas:
Color(random(), random(), random())
touch.ud['Line'] = Line(points=(touch.x, touch.y))
touch.ud['Line'].points += [random()*1000, random()*1000 ]
Clock.schedule_interval(self.touchme, 1.)

问题是 touchme 需要 touch 对象,因此您必须将其作为参数传递。像这样的东西可能有用,但我没有检查:

def on_touch_down(self, touch):
with self.canvas:
Color(random(), random(), random())
touch.ud['Line'] = Line(points=(touch.x, touch.y))
touch.ud['Line'].points += [random()*1000, random()*1000 ]
Clock.schedule_interval(lambda: self.touchme(touch), 1.)

def touchme(self, touch):
touch.ud['Line'].points += [random()*1000, random()*1000 ]
print 'touchme'

一般来说,我建议您尝试更好地了解变量作用域。在您的代码中,您尝试在不可见的地方访问变量 paintertouch

我自己才刚刚开始使用 kivy,所以也许我可以在几周内给出更完整的答案。 ;)

关于python - 了解 Kivy 中的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845038/

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