如何从Python中的另一个类访问另一个类的方法来编辑Kivy对象?

如何从Python中的另一个类访问另一个类的方法来编辑Kivy对象?,python,kivy,Python,Kivy,我试图用Python和Kivy做一个乒乓球游戏,但是我不能改变球的位置。无论何时我尝试,球都不会改变,除非我在类中调用我不想做的方法 Python: #Imported everything class PongGame(Widget): ball = ObjectProperty() def update(self): self.ball.pos = (1200, 1200) class PongBall(

我试图用Python和Kivy做一个乒乓球游戏,但是我不能改变球的位置。无论何时我尝试,球都不会改变,除非我在类中调用我不想做的方法

Python:

    #Imported everything

    class PongGame(Widget):
        ball = ObjectProperty()

        def update(self):
            self.ball.pos = (1200, 1200)


    class PongBall(Widget):
        pass

    class PongApp(App):
        def build(self):
            PongGame().update() #Doesn't work (doesn't do anything)
            print(PongGame().ball.pos)) #Not even printing right coordinates
            return PongGame()

     if __name__ = "__main__":
         PongApp().run()
千伏:

:
球:pball
庞贝尔:
id:pball
位置:(根中心x-(根宽度*0.05),根中心y*(1/12))
尺寸:(根高度*(1/20),根高度*(1/20))
:
画布:
颜色:
rgb:[1,1,1]
椭圆:
pos:self.pos
大小:self.size
1)两个开放式括号,三个闭合式括号:

print(PongGame().ball.pos))
2)
=
应更改为
=

if __name__ = "__main__":
3)这里您创建了3个不同的
PongGame
对象(它们将具有不同的状态),而不是创建一个:

PongGame().update() #Doesn't work (doesn't do anything)
print(PongGame().ball.pos)) #Not even printing right coordinates
return PongGame()
应该是:

root = PongGame()  # Create one object and change it's state.
root.update()
print(root.ball.pos)  # will print 1200, 1200
return root
4)kvlang将widgets属性绑定到它依赖的变量。所以,如果您想在将来更改球的位置,您不应该将其绑定到
忽略球的
位置
。换句话说,

pos: (root.center_x - (root.width * 0.05), root.center_y * (1/12))
是否应该依赖于
self.pos

pos: self.pos
-)这才是最重要的

我还添加了触球时的
on\u touch\u down
handling以显示球的位置变化(只需单击窗口即可移动球):

Builder.load\u字符串(b''
:
球:pball
庞贝尔:
id:pball
pos:self.pos
尺码:20,20
:
画布:
颜色:
rgb:[1,1,1]
椭圆:
pos:self.pos
大小:self.size
''')
类PongGame(小部件):
ball=ObjectProperty()
def更新(自我):
self.ball.pos=(200200)
def on_触控向下(自身,触控):
self.ball.pos=touch.pos#将球的位置更改为点击点
类PongBall(小部件):
通过
PongApp课程(应用程序):
def生成(自):
root=PongGame()
root.update()#初始球位置
返回根
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
PongApp().run()

尝试从def更新(self)中删除self?然后如何访问ball ObjectProperty?我认为运行PongGame()有问题。update()看到了吗
pos: self.pos
Builder.load_string(b'''
<PongGame>:
    ball: pball

    PongBall:
        id: pball
        pos: self.pos
        size: 20, 20

<PongBall>:
    canvas:
        Color:
            rgb: [1, 1, 1]
        Ellipse:
            pos: self.pos
            size: self.size
''')


class PongGame(Widget):
    ball = ObjectProperty()

    def update(self):
        self.ball.pos = (200, 200)

    def on_touch_down(self, touch):
        self.ball.pos = touch.pos  # change ball position to point of click


class PongBall(Widget):
    pass


class PongApp(App):
    def build(self):
        root = PongGame()
        root.update()  # init ball position
        return root


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